无论出于何种原因(utf-8),我都需要将 menhir 与 sedlex 一起使用,但不知道如何使生成的解析器依赖于Sedlexing
而不是Lexing
. 有小费吗?
当我跑
menhir --infer parser.mly
生成的程序带有Lexing...
. 我可以手动更改它,但必须有另一种方法,不是吗?
编辑:生成的 parser.ml应该有对 Lexing 的引用。Sedlexing 用于创建lexbuf
您发送到解析器的内容,但解析器并不关心该 lexbuf 是由 Lexing 还是 Sedlexing 创建的,只要它可以使用类似Lexing.lex_start_p
andLexing.lex_curr_p
之类的函数即可。
我用过类似的东西
ocamlbuild -use-menhir -tag thread -use-ocamlfind -quiet -pkg menhirLib \
-pkg sedlex test.native
其中 test.ml 通过调用 Parser 使用 parser.mly。
为了完整起见,由 ocamlbuild 运行的命令是:
menhir --ocamlc 'ocamlfind ocamlc -thread -package sedlex -package menhirLib' \
--explain --infer parser.mly
请参阅https://github.com/unhammer/ocaml_cg_streamparse的完整示例
(分支https://github.com/unhammer/ocaml_cg_streamparse/tree/match-singlechar-example显示匹配单个代码点的规则,例如a
或ß
但不匹配aa
)。