我试图弄清楚如何将 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 一起使用?