type t = | Value of Ast.Value.t | Ident of string | Plus | Minus | Asterisk | Slash | Carret | Percent | LParen | RParen | Equal let tokens = ref [ "+", Plus; "-", Minus; "*", Asterisk; "/", Slash; "^", Carret; "%", Percent; "(", LParen; ")", RParen; "=", Equal; ] let to_string = function | Value v -> Ast.Value.to_string v | Ident s -> s | t -> begin match List.find_opt (fun (_, tok) -> t = tok) !tokens with | None -> failwith "Token.to_string" | Some (s, _) -> s end