1 <Expr> ::= <BinOrExpr> [':' <Expr>]
2 <BinOrExpr> ::= <BinAndExpr> ['||' <BinOrExpr>]
3 <BinAndExpr> ::= <CompareExpr> ['&&' <BinAndExpr>]
4 <CompareExpr> ::= <PlusMinExpr> [('==' | '<' | '>' | '<=' | '>=' | '!=') <CompareExpr>]
5 <PlusMinExpr> ::= <TimesDivExpr> (('+' | '-') <TimesDivExpr>)*
6 <TimesDivExpr> ::= <BasicExpr> ('*' | '/' | '%'] <BasicExpr>)*
7 <BasicExpr> ::= <id> ['hd'|'tl'|'fst'|'snd]
14 | <id> '(' [<ActArgs>] ')'
16 | '(' <Expr> ',' <Expr> ')'
18 <ActArgs> ::= <Expr> [',' ActArgs]
20 <VarDecl> ::= (<Type> | 'var') <id> '=' <Expr> ';'
25 | '(' Type ',' Type ')'