4 True. Bool ::= "true" ;
5 False. Bool ::= "false" ;
7 SDecl. Stm ::= Typ Ident "=" Exp ";" ;
8 decl. Stm ::= Typ Ident ";" ;
9 define decl t v = SDecl t v EDefault ;
10 SExp. Stm ::= Exp ";" ;
11 SBlock. Stm ::= "{" [Stm] "}" ;
12 if. Stm ::= "if" "(" Exp ")" Stm ;
13 SIf. Stm ::= "if" "(" Exp ")" Stm "else" Stm ;
14 define if e s = SIf e s SNoop ;
15 SWhile. Stm ::= "while" "(" Exp ")" Stm ;
16 -- SFor. Stm ::= "for" "(" Stm Exp ";" Exp ")" Stm ;
17 SPrint. Stm ::= "print" Exp ";" ;
19 -- VVar. Var ::= Ident ;
20 -- VAss. Var ::= Ident "=" Exp;
22 ELt. Exp ::= Exp1 "<" Exp1 ;
23 EELt. Exp ::= Exp1 "<=" Exp1 ;
24 EGt. Exp ::= Exp1 ">" Exp1 ;
25 EEGt. Exp ::= Exp1 ">=" Exp1 ;
26 EEq. Exp ::= Exp1 "==" Exp1 ;
27 ENEq. Exp ::= Exp1 "!=" Exp1 ;
28 EPlus. Exp1 ::= Exp1 "+" Exp2 ;
29 EMinus. Exp1 ::= Exp1 "-" Exp2 ;
30 ETimes. Exp2 ::= Exp2 "*" Exp3 ;
31 EDiv. Exp2 ::= Exp2 "/" Exp3 ;
32 EIncr. Exp3 ::= Ident "++" ;
33 EDecr. Exp3 ::= Ident "--" ;
34 EVar. Exp3 ::= Ident ;
35 EAss. Exp3 ::= Ident "=" Exp;
36 EInt. Exp3 ::= Integer ;
37 ENeg. Exp3 ::= "-" Exp3 ;
38 EBool. Exp3 ::= Bool ;
39 EReadI. Exp3 ::= "readInt" ;
40 EReadB. Exp3 ::= "readBool" ;
50 Program. Stms ::= [Stm] ;
54 TBool. Typ ::= "bool" ;
58 internal ExpT. Exp ::= Typ Exp ;
59 internal SNoop. Stm ::= ;
60 internal EDefault. Exp ::= ;
65 entrypoints Stms, Exp ;