| JoyInt of int
| JoyList of joy_type list
-(* type joy_list = joy_type list *)
+type joy_list = joy_type list
let joy_true = JoyTrue
let joy_false = JoyFalse
let rec tokenize0 str start acc =
if start >= String.length str then acc
else
- let ch = String.get str start in
- match ch with
+ match String.get str start with
| '[' -> Left_bracket :: tokenize0 str (start + 1) acc
| ']' -> Right_bracket :: tokenize0 str (start + 1) acc
| ' ' -> tokenize0 str (start + 1) acc
let tokenize str = tokenize0 str 0 []
+(*
let token_to_string token =
match token with
| Left_bracket -> "["
| Right_bracket -> "]"
| Token str -> str
+*)
+
+
+let rec parse : token list -> joy_list = fun tokens ->
+ match tokens with
+ | [] -> []
+ | head :: tail ->
+ match head with
+ | Left_bracket -> zero :: parse tail
+ | Right_bracket -> JoyInt 1 :: parse tail
+ | Token tok ->
+ match tok with
+ | "true" -> joy_true :: parse tail
+ | "false"-> joy_false :: parse tail
+ | _ -> JoySymbol tok :: parse tail
+
+
+
-(*
-let char_tok ch acc =
- match ch with
- | '[' -> Left_bracket :: acc
- | ']' -> Right_bracket :: acc
- | ' ' -> acc
- | x -> (Token x) :: acc
-let tokenize str =
- String.fold_right char_tok str []
+
+
+(*
let text_to_expression str =
let tokens = tokenize str in
tokens
-
-let token_to_string token =
- match token with
- | Left_bracket -> "["
- | Right_bracket -> "]"
- | Token x -> Char.escaped x
let s = String.concat "" (List.map token_to_string (text_to_expression "1 [2]3" ))
+let s = String.concat " " (List.map token_to_string (tokenize "1 Pat [2]3"))
*)
(* let () = print_endline (joy_to_string dummy) *)
-let s = String.concat " " (List.map token_to_string (tokenize "1 [2]3"))
let () =
- print_endline s;
+ print_endline (expression_to_string (parse (tokenize "true [ false]true"))) ;
print_endline (joy_to_string dummy)