From: Simon Forman Date: Sat, 24 Sep 2022 16:01:16 +0000 (-0700) Subject: Order is preserved. X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=0d88895eade9cba05722d64f96fd4bd5743b1e07;p=joypy%2FThun.git Order is preserved. --- diff --git a/implementations/Ocaml/helloworld/bin/main.ml b/implementations/Ocaml/helloworld/bin/main.ml index 0d194a1..bcc6007 100644 --- a/implementations/Ocaml/helloworld/bin/main.ml +++ b/implementations/Ocaml/helloworld/bin/main.ml @@ -72,52 +72,47 @@ let rec parse : token list -> joy_list = fun tokens -> *) - (* Get the prefix of the list as joy type and return rest of list*) let rec expect_right_bracket tokens acc = match tokens with | [] -> raise (ParseError "Missing closing bracket.") - | head :: tail -> - match head with - | Right_bracket -> acc, tail - | Left_bracket -> - (* extract the sub-list *) - let sub_list, rest = expect_right_bracket tail [] in - (* continue looking for the expected "]" *) - let el, rrest = expect_right_bracket rest acc in - JoyList sub_list :: el, rrest - | Token tok -> - let el, rest = expect_right_bracket tail acc in - match tok with - | "true" -> joy_true :: el, rest - | "false"-> joy_false :: el, rest - | _ -> (JoySymbol tok) :: el, rest + | head :: tail -> ( + match head with + | Right_bracket -> (acc, tail) + | Left_bracket -> + (* extract the sub-list *) + let sub_list, rest = expect_right_bracket tail [] in + (* continue looking for the expected "]" *) + let el, rrest = expect_right_bracket rest acc in + (JoyList sub_list :: el, rrest) + | Token tok -> ( + let el, rest = expect_right_bracket tail acc in + match tok with + | "true" -> (joy_true :: el, rest) + | "false" -> (joy_false :: el, rest) + | _ -> (JoySymbol tok :: el, rest))) let foo head tail = match head with - | Left_bracket -> + | Left_bracket -> let el, rest = expect_right_bracket tail [] in - JoyList el, rest - | Right_bracket -> raise (ParseError "Extra closing bracket.") - | Token tok -> + (JoyList el, rest) + | Right_bracket -> raise (ParseError "Extra closing bracket.") + | Token tok -> ( match tok with - | "true" -> joy_true, tail - | "false"-> joy_false, tail - | _ -> JoySymbol tok, tail - + | "true" -> (joy_true, tail) + | "false" -> (joy_false, tail) + | _ -> (JoySymbol tok, tail)) let rec parse0 tokens acc = match tokens with | [] -> acc | head :: tail -> - let item, rest = foo head tail in - item :: parse0 rest acc + let item, rest = foo head tail in + item :: parse0 rest acc let parse : token list -> joy_list = fun tokens -> parse0 tokens [] - - - (* let text_to_expression str = @@ -130,8 +125,7 @@ let s = String.concat " " (List.map token_to_string (tokenize "1 Pat [2]3")) (* let () = print_endline (joy_to_string dummy) *) - let () = - print_endline (expression_to_string (parse (tokenize "1[2[3]4]5[][][[]]"))) ; - print_endline (expression_to_string (parse (tokenize "true [ false]true"))) ; + print_endline (expression_to_string (parse (tokenize "1 2 3[4 5 6[7 8]9 10]11[][][[]]"))); + print_endline (expression_to_string (parse (tokenize "true [ false]true"))); print_endline (joy_to_string dummy)