I need to use menhir with sedlex for whatever reason (utf-8), but don't know how to make the generated parser depend on Sedlexing
instead of Lexing
. Any tips?
When I run
menhir --infer parser.mly
the generated program has lines with Lexing...
. I could change it manually, but there must be another way, no?
EDIT: The parser.ml that is generated should have references to Lexing. Sedlexing is used to create the lexbuf
that you send in to the parser, but the parser doesn't care if that lexbuf was created by Lexing or Sedlexing, as long as it can use functions like Lexing.lex_start_p
and Lexing.lex_curr_p
on it.
I used something like
ocamlbuild -use-menhir -tag thread -use-ocamlfind -quiet -pkg menhirLib \
-pkg sedlex test.native
where test.ml uses parser.mly via calls to Parser.
For completeness, the command that's run by ocamlbuild is:
menhir --ocamlc 'ocamlfind ocamlc -thread -package sedlex -package menhirLib' \
--explain --infer parser.mly
See a full example at https://github.com/unhammer/ocaml_cg_streamparse
(branch https://github.com/unhammer/ocaml_cg_streamparse/tree/match-singlechar-example shows a rule that matches a single code point like a
or ß
but not aa
).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With