Created
May 24, 2019 17:34
-
-
Save hackwaly/2fd388826c05ecbfae2019b1bd6dc0af to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
%{ | |
[@@@warning "-39"] | |
%} | |
%start <unit> file | |
%% | |
file: | |
| MODULE UIDENT item* EOF {} | |
item: | |
| DEF LIDENT EQ exp {} | |
stmt: | |
| exp SEMICOLON {} | |
| LIDENT EQ exp SEMICOLON {} | |
| IF exp THEN stmt {} | |
| IF exp LBRACE stmt+ RBRACE {} | |
| IF exp LBRACE stmt+ RBRACE ELSE LBRACE stmt+ RBRACE {} | |
| FOR LBRACE stmt+ RBRACE {} | |
| FOR exp LBRACE stmt+ RBRACE {} | |
| WHILE exp DO stmt {} | |
| WHILE exp LBRACE stmt+ RBRACE {} | |
| DO stmt WHILE exp SEMICOLON {} | |
| DO LBRACE stmt+ RBRACE WHILE exp SEMICOLON {} | |
| RETURN exp SEMICOLON {} | |
| RETURN UIDENT EQ exp SEMICOLON {} | |
seq_exp: | |
| exp {} | |
| stmt seq_exp {} | |
exp: | |
| ident_prefix_exp {} | |
ident_prefix_exp: | |
| ident_infix_exp {} | |
| LIDENT ident_prefix_exp {} | |
| IF exp THEN exp ELSE exp {} | |
| IF exp LBRACE seq_exp RBRACE ELSE LBRACE seq_exp RBRACE {} | |
| LIDENT EQ_GT exp {} | |
| FUNC LPAREN list_allow_trailing_separator(COMMA, param) RPAREN EQ_GT exp {} | |
ident_infix_exp: | |
| infix_exp {} | |
| infix_exp LIDENT ident_infix_exp {} | |
infix_exp: | |
| prefix_exp {} | |
| prefix_exp infix_op infix_exp {} | |
%inline infix_op: | |
| PLUS {} | |
| MINUS {} | |
| STAR {} | |
| SLASH {} | |
| LT {} | |
| LT_EQ {} | |
| GT {} | |
| GT_EQ {} | |
| EQ_EQ {} | |
| BANG_EQ {} | |
prefix_exp: | |
| prefix_op postfix_exp {} | |
%inline prefix_op: | |
| MINUS {} | |
postfix_exp: | |
| atom_exp {} | |
| LIDENT_LPAREN list_allow_trailing_separator(COMMA, arg) RPAREN {} | |
| postfix_exp LPAREN list_allow_trailing_separator(COMMA, arg) RPAREN {} | |
| postfix_exp LBRACKET exp RBRACKET {} | |
| postfix_exp DOT_LIDENT {} | |
arg: | |
| LIDENT_COLON exp {} | |
| exp {} | |
atom_exp: | |
| HALT {} | |
| INT {} | |
| FLOAT {} | |
| LIDENT {} | |
| UIDENT {} | |
| LPAREN exp RPAREN {} | |
| BLOCK LBRACE seq_exp RBRACE {} | |
| BLOCK UIDENT LBRACE seq_exp RBRACE {} | |
| FUNC LPAREN list_allow_trailing_separator(COMMA, param) RPAREN LBRACE seq_exp RBRACE {} | |
param: | |
| LIDENT_COLON LIDENT {} | |
| LIDENT {} | |
list_allow_trailing_separator(SEP, X): | |
| { [] } | |
| x=X { [x] } | |
| x=X SEP l=list_allow_trailing_separator(SEP, X) { x :: l } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment