无论出于什么原因(utf-8),我都需要将shirlex与menhir一起使用,但是不知道如何使生成的解析器依赖Sedlexing而不是Lexing。有小费吗?

当我运行时

menhir --infer parser.mly

生成的程序包含带有Lexing...的行。我可以手动更改它,但是必须有另一种方法,不是吗?

最佳答案

编辑:生成的parser.ml应该具有对Lexing的引用。 Sedlexing用于创建发送到解析器的lexbuf,但是解析器不在乎该lexbuf是由Lexing还是Sedlexing创建的,只要它可以在其上使用Lexing.lex_start_pLexing.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)相匹配的规则)。

10-08 20:08