gf-3.1.6: examples/tutorial/calculator/CalculatorE.gf
--# -path=.:prelude
concrete CalculatorE of Calculator = open Prelude in {
flags lexer=codevar ; unlexer=unwords ;
lincat
Prog, Exp, Var = SS ;
lin
PEmpty = ss [] ;
PInit exp prog = ss ("initialize" ++ prog.$0 ++ "as" ++ exp.s ++ PAUSE ++ prog.s) ;
PAss vr exp prog = ss ("redefine" ++ vr.s ++ "as" ++ exp.s ++ PAUSE ++ prog.s) ;
EPlus = infix "plus" ;
EMinus = infix "minus" ;
ETimes = infix "times" ;
EDiv = infix ["divided by"] ;
EInt i = i ;
EVar x = x ;
oper
infix : Str -> SS -> SS -> SS = \op,x,y ->
ss (x.s ++ op ++ y.s ++ PAUSE) ;
PAUSE = "PAUSE" ;
}