functor PrintCodeFUN ( structure Code :CodeSig ): sig type Code val prCode : Code -> string end = struct open Code fun prInt (n:int) = PolyML.makestring n fun space s = " " ^ s ^ " " fun bracket s = "(" ^ s ^ ")" fun prVal (Id s) = space s | prVal (Lit n) = space (prInt n) fun prExpn (V v) = prVal v | prExpn ( x +++ y ) = prVal x ^ space"+" ^ prVal y | prExpn ( x --- y ) = prVal x ^ space"-" ^ prVal y | prExpn ( x *** y ) = prVal x ^ space"*" ^ prVal y | prExpn ( x /// y ) = prVal x ^ space"/" ^ prVal y fun prCond TRUE = bracket "t" | prCond FALSE = bracket "f" | prCond ( x === y ) = prVal x ^ space"==" ^ prVal y | prCond ( x <<= y ) = prVal x ^ space"<=" ^ prVal y | prCond ( x >>= y ) = prVal x ^ space">=" ^ prVal y | prCond ( x >>> y ) = prVal x ^ space">" ^ prVal y | prCond ( x <<< y ) = prVal x ^ space"<" ^ prVal y | prCond ( x !!= y ) = prVal x ^ space"!=" ^ prVal y fun prStatement (s := e) = s ^ space ":=" ^ prExpn e ^ "\n" | prStatement (GOTO(c,n)) = "if "^ bracket(prCond c) ^ " goto " ^ prInt n ^ "\n" fun prCode (Code c) = implode (map prStatement c) end;