From 9e3803ce7b02ca3e24ac4aade01f821e0f4e6aef Mon Sep 17 00:00:00 2001 From: Dmitry Boulytchev Date: Sun, 25 Feb 2018 15:02:30 +0300 Subject: [PATCH] Fixed Driver and SM --- src/Driver.ml | 4 ++-- src/SM.ml | 11 ++++++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/Driver.ml b/src/Driver.ml index 604223660..4082ccbab 100644 --- a/src/Driver.ml +++ b/src/Driver.ml @@ -21,7 +21,7 @@ let main = let stack = Sys.argv.(1) = "-s" in let infile = Sys.argv.(2) in match parse infile with - | `Ok ((_, stmt) as prog) -> + | `Ok prog -> let rec read acc = try let r = read_int () in @@ -33,7 +33,7 @@ let main = let output = if interpret then Language.eval prog input - else SM.eval (SM.compile prog) input + else SM.run (SM.compile prog) input in List.iter (fun i -> Printf.printf "%d\n" i) output | `Fail er -> Printf.eprintf "Syntax error: %s\n" er diff --git a/src/SM.ml b/src/SM.ml index d3cdf6898..07ab79c47 100644 --- a/src/SM.ml +++ b/src/SM.ml @@ -24,6 +24,14 @@ type config = int list * Language.Stmt.config *) let eval _ = failwith "Not yet implemented" +(* Top-level evaluation + + val run : prg -> int list -> int list + + Takes an input stream, a program, and returns an output stream this program calculates +*) +let run p i = let (_, (_, _, o)) = eval ([], (Expr.empty, i, [])) p in o + (* Stack machine compiler val compile : Language.Stmt.t -> prg @@ -31,5 +39,6 @@ let eval _ = failwith "Not yet implemented" Takes a program in the source language and returns an equivalent program for the stack machine *) - let compile _ = failwith "Not yet implemented" + +