lama_byterun/src/Driver.ml

44 lines
1.3 KiB
OCaml
Raw Normal View History

2024-07-05 13:23:20 +02:00
open Options
2023-09-04 21:43:28 +02:00
let[@ocaml.warning "-32"] main =
try
2019-11-24 02:30:32 +03:00
let cmd = new options Sys.argv in
2020-02-16 01:21:27 +03:00
cmd#greet;
2023-09-04 21:43:28 +02:00
match
try Language.run_parser cmd
with Language.Semantic_error msg -> `Fail msg
with
| `Ok prog -> (
cmd#dump_AST (snd prog);
cmd#dump_source (snd prog);
match cmd#get_mode with
| `Default | `Compile -> (
match cmd#march with
| `X86_32 -> ignore @@ X86_32.build cmd prog
| `AMD64 -> ignore @@ X86_64.build cmd prog)
2023-09-04 21:43:28 +02:00
| `BC -> SM.ByteCode.compile cmd (SM.compile cmd prog)
| _ ->
2023-09-04 21:43:28 +02:00
let rec read acc =
try
let r = read_int () in
Printf.printf "> ";
read (r :: acc)
with End_of_file -> List.rev acc
2023-09-04 21:43:28 +02:00
in
let input = read [] in
let output =
if cmd#get_mode = `Eval then Language.eval prog input
else SM.run (SM.compile cmd prog) input
in
List.iter (fun i -> Printf.printf "%d\n" i) output)
| `Fail er ->
Printf.eprintf "Error: %s\n" er;
exit 255
2020-02-16 01:21:27 +03:00
with
2023-09-04 21:43:28 +02:00
| Language.Semantic_error msg ->
Printf.printf "Error: %s\n" msg;
exit 255
| Commandline_error msg ->
Printf.printf "%s\n" msg;
exit 255