/** * The transformation from Fun to the 4 basic languages plus the * integer literals extension. * * @author Jacob Andersen */ idx("intLiterals.l") + (| "fun.l" -> "unsignedArith.l" + "logic.l" + "pairs.l" + "locals.l" + src("literals2unsignedArith.x") [ Exp -> Exp, LetExp -> Exp, OrExp -> Exp, AndExp -> Exp, NotExp -> Exp, RelExp -> Exp, SimpleExp -> Exp, Term -> Exp, Factor -> Exp, FacParen -> Exp, FacNoPar -> Exp, Prim -> Exp, Id -> Id, IntConst -> IntConst ] Exp.letexp = $2 ; LetExp.letvar = Exp.letvar($2,$5,$8) ; LetExp.letfun = Exp.letfun($2,$5,$9,$12) ; LetExp.letrec = Exp.letrec($2,$5,$9,$12) ; LetExp.if = Exp.if($1,$4,$7) ; LetExp.orexp = $1 ; OrExp.or = Exp.or($1,$4) ; OrExp.xor = Exp.xor($1,$4) ; OrExp.andexp = $1 ; AndExp.and = Exp.and($1,$4) ; AndExp.notexp = $1 ; NotExp.not = Exp.not($2) ; NotExp.relexp = $1 ; RelExp.simple = $1 ; SimpleExp.uplus = Exp.add(Exp.zero(),$2) ; SimpleExp.uminus = Exp.sub(Exp.zero(),$2) ; SimpleExp.add = Exp.add($1,$4) ; SimpleExp.sub = Exp.sub($1,$4) ; SimpleExp.term = $1 ; Term.mul = Exp.mul($1,$4) ; Term.factor = $1 ; Factor.facparen = $1 ; Factor.noparen = $1 ; FacParen.paren = Exp.paren($2) ; FacParen.app = Exp.app($1,$4) ; FacParen.iszero = Exp.iszero($3) ; FacParen.succ = Exp.succ($3) ; FacParen.pred = Exp.pred($3) ; FacParen.cons = Exp.cons($3,$6) ; FacParen.car = Exp.car($3) ; FacParen.cdr = Exp.cdr($3) ; FacNoPar.app1 = Exp.app($1,$3) ; FacNoPar.app2 = Exp.app($1,$3) ; FacNoPar.iszero = Exp.iszero($2) ; FacNoPar.succ = Exp.succ($2) ; FacNoPar.pred = Exp.pred($2) ; FacNoPar.car = Exp.car($2) ; FacNoPar.cdr = Exp.cdr($2) ; FacNoPar.prim = $1 ; Prim.true = Exp.true() ; Prim.false = Exp.false() ; Prim.var = Exp.var($1) ; Prim.intConst = Exp.intconst($1) ; |)