4 BTrue. BoolT ::= "true" ;
5 BFalse. BoolT ::= "false" ;
7 SDecl. Stm ::= Typ Var ";" ;
8 --SAss. Stm ::= Ident "=" Exp ";" ;
9 SExp. Stm ::= Exp ";" ;
10 SBlock. Stm ::= "{" [Stm] "}" ;
11 SIf. Stm ::= "if" "(" Exp ")" Stm ;
12 SIfE. Stm ::= "if" "(" Exp ")" Stm "else" Stm ;
13 SWhile. Stm ::= "while" "(" Exp ")" Stm ;
14 -- SFor. Stm ::= "for" "(" Stm Exp ";" Exp ")" Stm ;
15 SPrint. Stm ::= "print" Exp ";" ;
18 VAss. Var ::= Ident "=" Exp;
20 ELt. Exp ::= Exp1 "<" Exp1 ;
21 EELt. Exp ::= Exp1 "<=" Exp1 ;
22 EGt. Exp ::= Exp1 ">" Exp1 ;
23 EEGt. Exp ::= Exp1 ">=" Exp1 ;
24 EEq. Exp ::= Exp1 "==" Exp1 ;
25 ENEq. Exp ::= Exp1 "!=" Exp1 ;
26 EPlus. Exp1 ::= Exp1 "+" Exp2 ;
27 EMinus. Exp1 ::= Exp1 "-" Exp2 ;
28 ETimes. Exp2 ::= Exp2 "*" Exp3 ;
29 EDiv. Exp2 ::= Exp2 "/" Exp3 ;
30 EIncr. Exp3 ::= Ident "++" ;
31 EDecr. Exp3 ::= Ident "--" ;
33 EInt. Exp3 ::= Integer ;
34 ENeg. Exp3 ::= "-" Exp3 ;
35 EBool. Exp3 ::= BoolT ;
36 EReadI. Exp3 ::= "readInt" ;
37 EReadB. Exp3 ::= "readBool" ;
47 Program. Stms ::= [Stm] ;
51 TBool. Typ ::= "bool" ;
55 internal ExpT. Exp ::= Typ Exp ;
60 entrypoints Stms, Exp ;