summaryrefslogtreecommitdiff
path: root/grammar.bnf
diff options
context:
space:
mode:
Diffstat (limited to 'grammar.bnf')
-rw-r--r--grammar.bnf6
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 ::= '*' | '/' | '+' | '-' | '?=' | '/=' | '>' | '>=' | '<' | '<=';
14unop ::= '+' | '-' | '!'; 14unop ::= '+' | '-' | '!';
15simple-expression ::= '(' expression ')' 15simple-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
27array ::= '[' ']' | '[' expression (',' expression)* ','? ']'; 27array ::= '[' ']' | '[' 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
31tuple ::= '(' ')' | '(' expression ',' expression (',' expression)* ','? ')';
28 32
29if-else-expression ::= 'if' expression 'then' expression 'else' expression; 33if-else-expression ::= 'if' expression 'then' expression 'else' expression;
30let-in-expression ::= 'let' def-spec '=' expression ('and' def-spec '=' expression)* 'in' expression; 34let-in-expression ::= 'let' def-spec '=' expression ('and' def-spec '=' expression)* 'in' expression;