ce6732b87b223a68a8ea0614cb32936730b15341
[cc1516.git] / src / grammar / grammar.txt
1 <FunDecl> ::= <id> '(' <Type>* ')' ['::' <FunType] '{' <VarDecl>* <Stmt>+ '}'
2 <FunType> ::= <Type>+ '->' <VoidType>
3 | <VoidType>
4 <Stmt> ::= 'if' '(' <Expr> ')' '{' <Stmt>* '}' ['else' '{' <Stmt>* '}']
5 | 'while' '(' <Expr> ')' '{' <Stmt>* '}'
6 | <id> <FieldSels> '=' <Expr> ';'
7 | <FunCall> ';'
8 | 'return' [<Expr>] ';'
9
10 <VarDecl> ::= (<Type> | 'var') <id> '=' <Expr> ';'
11 <Expr> ::= <BinOrExpr> [':' <Expr>]
12 <BinOrExpr> ::= <BinAndExpr> ['||' <BinOrExpr>]
13 <BinAndExpr> ::= <CompareExpr> ['&&' <BinAndExpr>]
14 <CompareExpr> ::= <PlusMinExpr> [('==' | '<' | '>' | '<=' | '>=' | '!=') <CompareExpr>]
15 <PlusMinExpr> ::= <TimesDivExpr> (('+' | '-') <TimesDivExpr>)*
16 <TimesDivExpr> ::= <BasicExpr> (['*' | '/' | '%'] <BasicExpr>)*
17 <BasicExpr> ::= <id> <FieldSels>
18 | <Op1> <Expr>
19 | <int>
20 | <char>
21 | 'False'
22 | 'True'
23 | '(' <Expr> ')'
24 | <FunCall>
25 | '[]' <Expr>
26 | '(' <Expr> ',' <Expr> ')'
27
28 <FieldSels> ::= ('.' ('hd'|'tl'|'fst'|'snd))*
29 <FunCall> ::= <id> '(' [<ActArgs>] ')'
30 <ActArgs> ::= <Expr> [',' ActArgs]
31
32 <Type> ::= 'Int'
33 | 'Bool'
34 | 'Char'
35 | '(' Type ',' Type ')'
36 | '[' Type ']'
37 | <id>
38 <VoidType> ::= 'Void' | Type