infer voor statements
[cc1516.git] / grammar / grammar.txt
1 <Prog> ::= <FunDecl>+
2 <FunDecl> ::= <id> '(' <Type>* ')' ['::' <FunType] '{' <VarDecl>* <Stmt>+ '}'
3 <FunType> ::= <VoidType> ['->' <FunType>]
4 | '(' <FunType> ')'
5 <Stmt> ::= 'if' '(' <Expr> ')' '{' <Stmt>* '}' ['else' '{' <Stmt>* '}']
6 | 'while' '(' <Expr> ')' '{' <Stmt>* '}'
7 | <id> <FieldSels> '=' <Expr> ';'
8 | <FunCall> ';'
9 | 'return' [<Expr>] ';'
10 <VarDecl> ::= <Type> <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> ::= <Op1> <Expr>
18 | <int>
19 | <char>
20 | 'False'
21 | 'True'
22 | '(' <Expr> ')'
23 | <FunCall> <FieldSels>
24 | '[]' <Expr>
25 | '(' <Expr> ',' <Expr> ')'
26 <FieldSels> ::= ('.' ('hd'|'tl'|'fst'|'snd))*
27 <FunCall> ::= <id> ['(' <ActArgs>+ ')']
28 <ActArgs> ::= <Expr> [',' ActArgs]
29 <Type> ::= 'Int'
30 | 'Bool'
31 | 'Char'
32 | '(' Type ',' Type ')'
33 | '[' Type ']'
34 | <id>
35 <VoidType> ::= 'Void' | Type