我想通过 sedlex+menhir 在我的项目中添加 Menhir 的增量 API 和错误处理;我正在尝试在我的代码attempt2
中fail
采用这个示例。这是attempt2
示例:
let attempt2 filename text =
(* Allocate and initialize a lexing buffer. *)
let lexbuf = L.init filename (Lexing.from_string text) in
(* Wrap the lexer and lexbuf together into a supplier, that is, a
function of type [unit -> token * position * position]. *)
let supplier = I.lexer_lexbuf_to_supplier Lexer.token lexbuf in
(* Equip the supplier with a two-place buffer that records the positions
of the last two tokens. This is useful when a syntax error occurs, as
these are the token just before and just after the error. *)
let buffer, supplier = E.wrap_supplier supplier in
(* Fetch the parser's initial checkpoint. *)
let checkpoint = UnitActionsParser.Incremental.main lexbuf.lex_curr_p in
(* Run the parser. *)
(* We do not handle [Lexer.Error] because we know that we will not
encounter a lexical error during this second parsing run. *)
I.loop_handle succeed (fail text buffer) supplier checkpoint
在我的代码中,我尝试了:
let lexbuf : Lexing.lexbuf = MenhirLib.LexerUtil.init "filename" (Lexing.from_string s) in
let supplier = UnitActionsParser_e.MenhirInterpreter.lexer_lexbuf_to_supplier Sedlexer_e.token_ao lexbuf in
但是,编译给了我一个错误:
260 | let supplier = UnitActionsParser_e.MenhirInterpreter.lexer_lexbuf_to_supplier Sedlexer_e.token_ao lexbuf in
^^^^^^^^^^^^^^^^^^^
Error: This expression has type Sedlexing.lexbuf -> Parser_e.token
but an expression was expected of type
Lexing.lexbuf -> UnitActionsParser_e.MenhirInterpreter.token
Type Sedlexing.lexbuf is not compatible with type Lexing.lexbuf
make: *** [expression/e.cmo] Error 2
有人可以帮忙吗?
(* GitHub中的链接*)