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