OSDN Git Service

Simple REPL.
authorSimon Forman <sforman@hushmail.com>
Sun, 25 Sep 2022 02:33:29 +0000 (19:33 -0700)
committerSimon Forman <sforman@hushmail.com>
Sun, 25 Sep 2022 02:33:29 +0000 (19:33 -0700)
Still very crude, and exceptions are not caught, but it works.

implementations/Ocaml/helloworld/bin/main.ml

index 7d624e4..4482306 100644 (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 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
+