-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.ml
More file actions
26 lines (23 loc) · 737 Bytes
/
main.ml
File metadata and controls
26 lines (23 loc) · 737 Bytes
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
open Syntax
open Eval
open Infer
let rec read_eval_print env tyenv=
print_string "# ";
flush stdout;
let cmd = Parser.toplevel Lexer.main (Lexing.from_channel stdin) in
let (t,newtyenv) = infer_cmd tyenv cmd in
let (id, newenv, v) = eval_command env cmd in
if (id = "Error") then (print_newline ();read_eval_print newenv newtyenv) (*idが"Error"の場合には改行して次の入力を待つ*)
else
(Printf.printf "%s :" id;
TySyntax.print_type t;
Printf.printf " = " ;
print_value v;
print_newline ();
read_eval_print newenv newtyenv)
let initial_env =
extend "i" (VInt 1)
(extend "v" (VInt 5)
(extend "x" (VInt 10)
empty_env))
let _ = read_eval_print initial_env []