Seperate Value.t and Token.t

This commit is contained in:
백현웅 2022-02-01 02:06:18 +09:00
parent c33fd366ee
commit d6f31ccde0
3 changed files with 14 additions and 8 deletions

8
lex.ml
View file

@ -1,4 +1,4 @@
open Ast.Value
open Token
exception Invalid_character of char
exception Expected of char
@ -48,7 +48,7 @@ let expect_token str tok seq =
aux str seq |> Option.map (fun s -> tok, s)
let find_token seq =
!Token.tokens |> List.find_map
!tokens |> List.find_map
(fun (s, t) -> expect_token s t seq)
(* same as take_while f seq, drop_while f seq *)
@ -79,7 +79,7 @@ let tokenize str =
let str, seq = partition_while ((<>) '"') seq in
let str = String (String.of_seq str) in
let seq = expect_char '"' seq in
cons (Value str) (aux seq)
cons str (aux seq)
(* number (int, float) *)
else if is_digit x then
@ -90,7 +90,7 @@ let tokenize str =
then Float (float_of_string n)
else Int (int_of_string n)
in
cons (Value n) (aux seq)
cons n (aux seq)
(* idents *)
else if is_ident_start x then

View file

@ -208,8 +208,10 @@ and value seq =
match seq () with
| Seq.Nil -> raise End_of_tokens
| Seq.Cons (x, seq) -> begin match x with
| Token.Value x -> Value x, seq
| Ident id -> Var id, seq
| Token.Ident id -> Var id, seq
| Int x -> Value (Int x), seq
| Float x -> Value (Float x), seq
| String x -> Value (String x), seq
| LParen ->
let e, seq = expr min_int seq in
let _, seq = token RParen seq in

View file

@ -1,5 +1,7 @@
type t =
| Value of Ast.Value.t
| Int of int
| Float of float
| String of string
| Ident of string
| Plus
| Minus
@ -24,7 +26,9 @@ let tokens = ref [
]
let to_string = function
| Value v -> Ast.Value.to_string v
| Int n -> string_of_int n
| Float n -> string_of_float n
| String x -> x
| Ident s -> s
| t ->
begin match List.find_opt (fun (_, tok) -> t = tok) !tokens with