Я пытаюсь выяснить, как использовать ocamlyacc с sedlex.
lexer.ml
(с использованием sedlex):
let rec lex (lexbuf: Sedlexing.lexbuf) =
match%sedlex lexbuf with
| white_space -> lex lexbuf
(* ... other lexing rules ... *)
| _ -> failwith "Unrecognized."
У меня также есть файл ocamlyacc с именем parser.mly
,который содержит parse
в качестве одного из правил грамматики.
Чтобы проанализировать строку, я использовал это:
let lexbuf = Sedlexing.Utf8.from_string s in
let parsed = (Parser.parse Lexer.lex) lexbuf in
(* ... do things ... *)
Но во время компиляции появляется эта ошибка (вызванная Lexer.lex
выше):
Ошибка: это выражение имеет тип Sedlexing.lexbuf -> Parser.token, но ожидалось выражение типа Lexing.lexbuf -> Parser.token Тип Sedlexing.lexbuf несовместим с типомLexing.lexbuf
Насколько я понимаю, эта ошибка возникает из-за того, что ocamlyacc ожидает, что лексер будет создан ocamllex, а не sedlex.Итак, вопрос: как я могу использовать ocamlyacc с sedlex?