-<Expr> ::= <id> ['hd'|'tl'|'fst'|'snd] <Expr`>
- | <Op1> <Expr> <Expr`>
- | <int> <Expr`>
- | <char> <Expr`>
- | 'False' <Expr`>
- | 'True' <Expr`>
- | '(' <Expr> ')' <Expr`>
- | <id> '(' [<ActArgs>] ')' <Expr`>
- | '[]' <Expr> <Expr`>
- | '(' <Expr> ',' <Expr> ')' <Expr`>
-<Expr`> ::= <Op2> <Expr> <Expr`> | e
+<Expr> ::= <ExprWithoutOp> <ExprMaybeOp>
+
+
+<ExprMaybeOp> ::= '+' <Expr>
+
+<ModExpr> ::= <PlusMinExpr> ['%' <ModExpr>]
+
+<PlusMinExpr> ::= <TimesDivExpr> [('+' | '-') <PlusMinExpr>]
+
+<TimesDivExpr> ::= <BasicExpr> ['*' | '/' | '%'] <TimesDivExpr>]
+
+<BasicExpr> ::= <id> ['hd'|'tl'|'fst'|'snd]
+ | <Op1> <Expr>
+ | <int>
+ | <char>
+ | 'False'
+ | 'True'
+ | '(' <Expr> ')'
+ | <id> '(' [<ActArgs>] ')'
+ | '[]' <Expr>
+ | '(' <Expr> ',' <Expr> ')'
+
<Op2> ::= '+' | '-' | '*' | '/' | '%' | '==' | '<' | '>' | '<=' | '>='
| '!=' | '&&' | '||' | ':'