Simple REPL.

Still very crude, and exceptions are not caught, but it works.
This commit is contained in:
Simon Forman 2022-09-24 19:33:29 -07:00
parent 10cdba844b
commit 5e786db63f
1 changed files with 22 additions and 1 deletions

View File

@ -265,14 +265,35 @@ let d = dict_add d0 "sqr" (text_to_expression "dup mul")
(* (*
let expr = text_to_expression "1 2 + 3 4 + 5 6 + 7 8 + 9 10 + 11 + + + + + - " let expr = text_to_expression "1 2 + 3 4 + 5 6 + 7 8 + 9 10 + 11 + + + + + - "
let expr = text_to_expression "1 2 3 4 clear 5" let expr = text_to_expression "1 2 3 4 clear 5"
https://riptutorial.com/ocaml/example/9450/read-from-standard-input-and-print-to-standard-output
*) *)
let maybe_read_line () =
try Some(read_line())
with End_of_file -> None
(*
let expr = text_to_expression "clear [23] [18] concat 32 ++" let expr = text_to_expression "clear [23] [18] concat 32 ++"
let s = text_to_expression "23 [18 99] " let s = text_to_expression "23 [18 99] "
let stack, _ = joy s expr d let stack, _ = joy s expr d
let () = print_endline (expression_to_string stack) let () = print_endline (expression_to_string stack)
(* print_endline print_endline
(expression_to_string (expression_to_string
(text_to_expression "1 2 3[4 5 6[7 8]9 10]11[][][[]]")); (text_to_expression "1 2 3[4 5 6[7 8]9 10]11[][][[]]"));
print_endline (expression_to_string (text_to_expression "true [ false]true")); print_endline (expression_to_string (text_to_expression "true [ false]true"));
print_endline (joy_to_string dummy) print_endline (joy_to_string dummy)
*) *)
let rec main_loop stack dictionary =
match maybe_read_line () with
| Some(line) ->
let expr = text_to_expression line in
let (stack0, dictionary0) = joy stack expr dictionary in
let () = print_endline (expression_to_string stack0) in
main_loop stack0 dictionary0
| None -> exit 0
let () = main_loop [] d