diff options
Diffstat (limited to 'syntax.sml')
| -rw-r--r-- | syntax.sml | 23 |
1 files changed, 20 insertions, 3 deletions
@@ -31,7 +31,12 @@ struct (* Lambda language *) type var = int - datatype primop = PExit + datatype primop = + PExit + | PAdd + | PSub + | PMul + | PDiv datatype lexp = LVar of var @@ -64,6 +69,10 @@ struct | OPeek of var * int * value | OShuf of var * value | OExit of value + | OAdd of var * value * value + | OSub of var * value * value + | OMul of var * value * value + | ODiv of var * value * value | OLabel of var fun listToString (show : 'a -> string) (l : 'a list) = @@ -121,6 +130,10 @@ struct fun primopToString (x : primop) : string = case x of PExit => "PExit" + | PAdd => "PAdd" + | PSub => "PSub" + | PMul => "PMul" + | PDiv => "PDiv" fun lexpToString (x : lexp) : string = case x of @@ -156,11 +169,15 @@ struct fun opcodeToString (oper : opcode) : string = case oper of - OAlloc (r, s) => "Var " ^ Int.toString r ^ " = OAlloc(" ^ valueToString s ^ ")" + OAlloc (r, s) => "Var " ^ Int.toString r ^ " = OAlloc (" ^ valueToString s ^ ")" | OCall => "OCall" | OPoke (i, p, v) => "Var " ^ Int.toString p ^ "[" ^ Int.toString i ^ "] = " ^ valueToString v | OPeek (r, i, p) => "Var " ^ Int.toString r ^ " = " ^ valueToString p ^ "[" ^ Int.toString i ^ "]" | OShuf (d, s) => "Var " ^ Int.toString d ^ " = " ^ valueToString s - | OExit v => "OExit " ^ valueToString v + | OExit v => "OExit (" ^ valueToString v ^ ")" + | OAdd (r, v1, v2) => "Var " ^ Int.toString r ^ " = OAdd (" ^ valueToString v1 ^ ", " ^ valueToString v2 ^ ")" + | OSub (r, v1, v2) => "Var " ^ Int.toString r ^ " = OSub (" ^ valueToString v1 ^ ", " ^ valueToString v2 ^ ")" + | OMul (r, v1, v2) => "Var " ^ Int.toString r ^ " = OMul (" ^ valueToString v1 ^ ", " ^ valueToString v2 ^ ")" + | ODiv (r, v1, v2) => "Var " ^ Int.toString r ^ " = ODiv (" ^ valueToString v1 ^ ", " ^ valueToString v2 ^ ")" | OLabel l => "OLabel " ^ Int.toString l end |
