1 <Expr> ::= <ExprWithoutOp> <ExprMaybeOp>
4 <ExprMaybeOp> ::= '+' <Expr>
6 <ModExpr> ::= <PlusMinExpr> ['%' <ModExpr>]
8 <PlusMinExpr> ::= <TimesDivExpr> [('+' | '-') <PlusMinExpr>]
10 <TimesDivExpr> ::= <BasicExpr> ['*' | '/' | '%'] <TimesDivExpr>]
12 <BasicExpr> ::= <id> ['hd'|'tl'|'fst'|'snd]
19 | <id> '(' [<ActArgs>] ')'
21 | '(' <Expr> ',' <Expr> ')'
23 <Op2> ::= '+' | '-' | '*' | '/' | '%' | '==' | '<' | '>' | '<=' | '>='
24 | '!=' | '&&' | '||' | ':'
26 <ActArgs> ::= <Expr> [',' ActArgs]
28 <VarDecl> ::= (<Type> | 'var') <id> '=' <Expr> ';'
33 | '(' Type ',' Type ')'