diff options
Diffstat (limited to 'grammar.bnf')
| -rw-r--r-- | grammar.bnf | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/grammar.bnf b/grammar.bnf index a9e21cb..8715ad2 100644 --- a/grammar.bnf +++ b/grammar.bnf | |||
| @@ -14,17 +14,21 @@ binop ::= '*' | '/' | '+' | '-' | '?=' | '/=' | '>' | '>=' | '<' | '<='; | |||
| 14 | unop ::= '+' | '-' | '!'; | 14 | unop ::= '+' | '-' | '!'; |
| 15 | simple-expression ::= '(' expression ')' | 15 | simple-expression ::= '(' expression ')' |
| 16 | | 'true' | 'false' | 16 | | 'true' | 'false' |
| 17 | | '(' ')' | ||
| 18 | | INTEGER | 17 | | INTEGER |
| 19 | | IDENTIFIER | 18 | | IDENTIFIER |
| 20 | | STRING | 19 | | STRING |
| 21 | | array | 20 | | array |
| 21 | | tuple | ||
| 22 | | if-else-expression | 22 | | if-else-expression |
| 23 | | let-in-expression | 23 | | let-in-expression |
| 24 | | fn-expression | 24 | | fn-expression |
| 25 | | do-expression; | 25 | | do-expression; |
| 26 | 26 | ||
| 27 | array ::= '[' ']' | '[' expression (',' expression)* ','? ']'; | 27 | array ::= '[' ']' | '[' expression (',' expression)* ','? ']'; |
| 28 | // Note that tuples always have either zero or at least two elements | ||
| 29 | // A tuple with only one element is just '(' expression ')' -- a parenthese-wrapped expression | ||
| 30 | // Also '(' expression ',' ')' is illegal | ||
| 31 | tuple ::= '(' ')' | '(' expression ',' expression (',' expression)* ','? ')'; | ||
| 28 | 32 | ||
| 29 | if-else-expression ::= 'if' expression 'then' expression 'else' expression; | 33 | if-else-expression ::= 'if' expression 'then' expression 'else' expression; |
| 30 | let-in-expression ::= 'let' def-spec '=' expression ('and' def-spec '=' expression)* 'in' expression; | 34 | let-in-expression ::= 'let' def-spec '=' expression ('and' def-spec '=' expression)* 'in' expression; |