1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
[@@@ocaml.text "*/*"]
(** Copyright 2021-2024, Kakadu and contributors *)
(** SPDX-License-Identifier: LGPL-3.0-or-later *)
[@@@ocaml.text "*/*"]
module Arg = Stdlib.Arg
module Interpreter = Mini_ml_lib.Interpreter
module Parser = Mini_ml_lib.Parser
type opts = { mutable env : Interpreter.env }
let run env =
while true do
try
let line = read_line () in
match Parser.parse_line line with
| Parser.ParseError error -> Parser.show_error error |> print_endline
| Parser.Parsed (ast, _) ->
Interpreter.run env ast |> snd |> Interpreter.show_result |> print_endline
with
| End_of_file -> exit 0
done
;;
let () =
let options = { env = Interpreter.new_env } in
let args =
[ ( "--steps"
, Arg.Int (fun n -> options.env <- Interpreter.new_env_limited n)
, "Set maximum number of evaluation steps" )
]
in
Arg.parse args (fun _ -> ()) "An interpreter for ML-like language";
run options.env
;;