-- Mini.cf

Prog. Program ::= [Stm] ;

terminator Stm "" ;

SDecl.  Stm ::= Type Ident ";"  ;
SAss.   Stm ::= Ident "=" Exp ";" ;
SBlock. Stm ::= "{" [Stm] "}" ;
SPrint. Stm ::= "print" Exp  ";" ;

EVar.    Exp1 ::= Ident ;
EInt.    Exp1 ::= Integer ;
EDouble. Exp1 ::= Double ;
EAdd.    Exp  ::= Exp "+" Exp1 ;

coercions Exp 1 ;

TInt.    Type ::= "int" ;
TDouble. Type ::= "double" ;

-- for the annotating type checker
internal ETyped. Exp1 ::= Type "(" Exp ")" ;