Open
Description
I would like to enable error handling and incremental API of menhir in my project by sedlex+menhir; I'm trying to adopt attempt2
and fail
of this sample to my code. Here is the attempt2
of the sample:
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
In my code, I tried:
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
However, the compilation gave me an error:
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
Could anyone help?
(* link in StackOvereflow *)
Metadata
Metadata
Assignees
Labels
No labels