From 5e786db63f0d85c30cd7a71a0b988bb502e9e9b5 Mon Sep 17 00:00:00 2001 From: Simon Forman Date: Sat, 24 Sep 2022 19:33:29 -0700 Subject: [PATCH] Simple REPL. Still very crude, and exceptions are not caught, but it works. --- implementations/Ocaml/helloworld/bin/main.ml | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/implementations/Ocaml/helloworld/bin/main.ml b/implementations/Ocaml/helloworld/bin/main.ml index 7d624e4..4482306 100644 --- a/implementations/Ocaml/helloworld/bin/main.ml +++ b/implementations/Ocaml/helloworld/bin/main.ml @@ -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 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 s = text_to_expression "23 [18 99] " let stack, _ = joy s expr d let () = print_endline (expression_to_string stack) -(* print_endline +print_endline (expression_to_string (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 (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 + -- 2.11.0