infixr 4 ++ infixr 6 **; functor COMPILE( structure Expn:ExpnSig and Machine:MachineSig ):CompileSig = struct 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)) fun code expn = codeacc(expn, []) end;