type t = | Int of int | Float of float | String of string | Ident of string | Plus | Minus | Asterisk | Slash | Carret | Percent | LParen | RParen | Equal | Hash | Right_arrow let tokens = ref [ "->", Right_arrow; "+", Plus; "-", Minus; "*", Asterisk; "/", Slash; "^", Carret; "%", Percent; "(", LParen; ")", RParen; "=", Equal; "#", Hash; ] let to_string = function | 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 | None -> failwith "Token.to_string" | Some (s, _) -> s end