--# -path=.:prelude

concrete CalculatorC of Calculator = open Prelude, Formal in {

  flags lexer=codevars ; unlexer=code ;

  lincat 
    Prog, Var = SS ; 
    Exp = TermPrec ;

  lin
    PEmpty = ss [] ;
    PInit exp prog = ss ("int" ++ prog.$0 ++ "=" ++ top exp ++ ";" ++ prog.s) ;
    PAss vr exp prog = ss (vr.s ++ "=" ++ top exp ++ ";" ++ prog.s) ;

    EPlus  = infixl 0 "+" ;
    EMinus = infixl 0 "-" ;
    ETimes = infixl 1 "*" ;
    EDiv   = infixl 1 "/" ;

    EInt i = constant i.s ;
    EVar x = constant x.s ;

}
