infixr 4 ++ infixr 6 ** structure Compile = struct local open Expn Machine fun codeacc (Id s, rest) = PushVal s :: rest | codeacc (Lit n, rest) = PushLit n :: rest | codeacc (a ++ b, rest) = codeacc(a, codeacc(b, Add :: rest)) | codeacc (a ** b, rest) = codeacc(a, codeacc(b, Mul :: rest)) in fun code expn = codeacc(expn, []) end end;