-- SFor. Stm ::= "for" "(" Stm Exp ";" Exp ")" Stm ;
SPrint. Stm ::= "print" Exp ";" ;
--- VVar. Var ::= Ident ;
--- VAss. Var ::= Ident "=" Exp;
-
BExp. Exp ::= Exp1 BOp Exp1 ;
op1. Exp1 ::= Exp1 Op1 Exp2 ;
define op1 e1 o e2 = OpExp e1 o e2 ;
op2. Exp2 ::= Exp2 Op2 Exp3 ;
define op2 e1 o e2 = OpExp e1 o e2 ;
-EIncr. Exp3 ::= Ident "++" ;
-EDecr. Exp3 ::= Ident "--" ;
+postIncr. Exp3 ::= Ident "++" ;
+define postIncr i = EPost i Plus ;
+postDecr. Exp3 ::= Ident "--" ;
+define postDecr i = EPost i Minus ;
EVar. Exp3 ::= Ident ;
EAss. Exp3 ::= Ident "=" Exp;
EInt. Exp3 ::= Integer ;
internal EDefault. Exp ::= ;
internal OpExp. Exp ::= Exp Op Exp ;
internal NoType. Type ::= ;
+internal EPost. Exp ::= Ident Op1 ;
comment "/*" "*/" ;
comment "//" ;