无论出于什么原因(utf-8),我都需要将shirlex与menhir一起使用,但是不知道如何使生成的解析器依赖Sedlexing
而不是Lexing
。有小费吗?
当我运行时
menhir --infer parser.mly
生成的程序包含带有
Lexing...
的行。我可以手动更改它,但是必须有另一种方法,不是吗? 最佳答案
编辑:生成的parser.ml应该具有对Lexing的引用。 Sedlexing用于创建发送到解析器的lexbuf
,但是解析器不在乎该lexbuf是由Lexing还是Sedlexing创建的,只要它可以在其上使用Lexing.lex_start_p
和Lexing.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
)相匹配的规则)。