diff options
| author | Rose Hogenson <rosehogenson@posteo.net> | 2024-04-07 09:11:28 -0700 |
|---|---|---|
| committer | Rose Hogenson <rosehogenson@posteo.net> | 2024-04-07 09:11:28 -0700 |
| commit | 278ee46f0fa93a3db4ebdc6878fcd9b1d990094a (patch) | |
| tree | 85cd7b4703cacea8111ea05766089ca73aac9abb /syntax.sml | |
| parent | Support function arguments. (diff) | |
| download | sml-278ee46f0fa93a3db4ebdc6878fcd9b1d990094a.tar.zst | |
Add tests and fix variables.
Diffstat (limited to 'syntax.sml')
| -rw-r--r-- | syntax.sml | 14 |
1 files changed, 8 insertions, 6 deletions
@@ -24,8 +24,9 @@ struct | EOrElse of expr * expr | ELet of dec list * expr | ELambda of pat * expr + | ECase of expr * (pat * expr) list - and dec = DVal of expr + and dec = DVal of pat * expr (* Lambda language *) type var = int @@ -106,11 +107,12 @@ struct | EOrElse (a, b) => "EOrElse (" ^ self a ^ ", " ^ self b ^ ")" | ELet (decs, e) => "ELet (" ^ multilineListToString decToStringI indent decs ^ ", " ^ self e ^ ")" | ELambda (pat, e) => "ELambda (" ^ patToString pat ^ ", " ^ exprToStringI indent e ^ ")" + | ECase (e, branches) => "ECase (" ^ self e ^ ", " ^ multilineListToString (fn indent => fn (pat, body) => "(" ^ patToString pat ^ ", " ^ exprToStringI indent body ^ ")") indent branches ^ ")" end and decToStringI (indent : string) (x : dec) : string = case x of - DVal e => "DVal (" ^ exprToStringI indent e ^ ")" + DVal (p, e) => "DVal (" ^ patToString p ^ ", " ^ exprToStringI indent e ^ ")" val exprToString : expr -> string = exprToStringI "" @@ -154,11 +156,11 @@ struct fun opcodeToString (oper : opcode) : string = case oper of - OAlloc (r, s) => "OAlloc (" ^ Int.toString r ^ ", " ^ valueToString s ^ ")" + OAlloc (r, s) => "Var " ^ Int.toString r ^ " = OAlloc(" ^ valueToString s ^ ")" | OCall => "OCall" - | OPoke (i, p, v) => "OPoke (" ^ Int.toString i ^ ", " ^ Int.toString p ^ ", " ^ valueToString v ^ ")" - | OPeek (r, i, p) => "OPeek (" ^ Int.toString r ^ ", " ^ Int.toString i ^ ", " ^ valueToString p ^ ")" - | OShuf (d, s) => "OShuf (" ^ Int.toString d ^ ", " ^ valueToString s ^ ")" + | 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 | OLabel l => "OLabel " ^ Int.toString l end |
