Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using menhir with sedlex

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?

like image 457
Olle Härstedt Avatar asked Jun 15 '15 19:06

Olle Härstedt


1 Answers

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).

like image 174
unhammer Avatar answered Oct 21 '22 07:10

unhammer