| 'if' '(' Exp ')' Stm 'else' Stm { SIf $3 $5 $7 }
| 'while' '(' Exp ')' Stm { SWhile $3 $5 }
| 'print' Exp ';' { SPrint $2 }
- | Stm ';' { $1 }
Exp :: { Exp }
Exp : Exp1 BOp Exp1 { BExp $1 $2 $3 }
+ | Ident '=' Exp { EAss $1 $3 }
| Exp1 { $1 }
Exp3 : Ident '++' { postIncr_ $1 }
| Ident '--' { postDecr_ $1 }
| Ident { EVar $1 }
- | Ident '=' Exp { EAss $1 $3 }
| Integer { EInt $1 }
| '-' Exp3 { ENeg $2 }
| Bool { EBool $1 }
| 'readInt' { EReadI }
| 'readBool' { EReadB }
- | '(' Exp ')' { $2 }
+ | Exp4 { $1 }
+
+
+Exp4 :: { Exp }
+Exp4 : '(' Exp ')' { $2 }
ListStm :: { [Stm] }