diff --git a/regression/common.ml b/regression/common.ml index 924f31344..fa06cbe4e 100644 --- a/regression/common.ml +++ b/regression/common.ml @@ -9,7 +9,7 @@ let state ps = List.fold_right (fun (x, v) (s, p) -> Expr.update x v s, (x =:= ! let eval (s, p) e = let orig = Expr.eval s e in let stmt = List.fold_right (fun p s -> p |> s) p (Stmt.Write e) in - let [s_orig] = Stmt.eval [] stmt in + let [s_orig] = eval [] stmt in let [sm_orig] = SM.run [] (SM.compile stmt) in if conj (orig = s_orig) (orig = sm_orig) then Printf.printf "%d\n" orig diff --git a/src/Syntax.ml b/src/Syntax.ml index 9701f0951..dae24127b 100644 --- a/src/Syntax.ml +++ b/src/Syntax.ml @@ -68,3 +68,17 @@ module Stmt = let eval _ = failwith "Not implemented yet" end + +(* The top-level definitions *) + +(* The top-level syntax category is statement *) +type t = Stmt.t + +(* Top-level evaluator + + eval : int list -> t -> int list + + Takes a program and its input stream, and returns the output stream +*) +let eval i p = + let _, _, o = Stmt.eval (Expr.empty, i, []) p in o