Mod. Module ::= [Def] ; Fun. Def ::= Header "{" [Stm] "}" ; terminator Def "" ; Head. Header ::= Type Ident "(" [Decl] ")" ; SDecl. Stm ::= Decl ; SExp. Stm ::= Exp ; SRet. Stm ::= "return" Exp ; terminator Stm ";" ; DTyp. Decl ::= Type Ident ; separator Decl "," ; EId. Exp2 ::= Ident ; ECall. Exp1 ::= Ident "(" [Exp] ")" ; EAss. Exp1 ::= Ident "=" Exp1 ; EPlus. Exp ::= Exp "+" Exp1 ; coercions Exp 2 ; separator Exp "," ; TInt. Type ::= "int" ;