mirror of
https://github.com/ProgramSnail/Lama.git
synced 2026-01-02 03:58:18 +00:00
Fixed Driver and
SM
This commit is contained in:
parent
1996d0e0cb
commit
9e3803ce7b
2 changed files with 12 additions and 3 deletions
|
|
@ -21,7 +21,7 @@ let main =
|
||||||
let stack = Sys.argv.(1) = "-s" in
|
let stack = Sys.argv.(1) = "-s" in
|
||||||
let infile = Sys.argv.(2) in
|
let infile = Sys.argv.(2) in
|
||||||
match parse infile with
|
match parse infile with
|
||||||
| `Ok ((_, stmt) as prog) ->
|
| `Ok prog ->
|
||||||
let rec read acc =
|
let rec read acc =
|
||||||
try
|
try
|
||||||
let r = read_int () in
|
let r = read_int () in
|
||||||
|
|
@ -33,7 +33,7 @@ let main =
|
||||||
let output =
|
let output =
|
||||||
if interpret
|
if interpret
|
||||||
then Language.eval prog input
|
then Language.eval prog input
|
||||||
else SM.eval (SM.compile prog) input
|
else SM.run (SM.compile prog) input
|
||||||
in
|
in
|
||||||
List.iter (fun i -> Printf.printf "%d\n" i) output
|
List.iter (fun i -> Printf.printf "%d\n" i) output
|
||||||
| `Fail er -> Printf.eprintf "Syntax error: %s\n" er
|
| `Fail er -> Printf.eprintf "Syntax error: %s\n" er
|
||||||
|
|
|
||||||
11
src/SM.ml
11
src/SM.ml
|
|
@ -24,6 +24,14 @@ type config = int list * Language.Stmt.config
|
||||||
*)
|
*)
|
||||||
let eval _ = failwith "Not yet implemented"
|
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
|
(* Stack machine compiler
|
||||||
|
|
||||||
val compile : Language.Stmt.t -> prg
|
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
|
Takes a program in the source language and returns an equivalent program for the
|
||||||
stack machine
|
stack machine
|
||||||
*)
|
*)
|
||||||
|
|
||||||
let compile _ = failwith "Not yet implemented"
|
let compile _ = failwith "Not yet implemented"
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue