9

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

当我跑

menhir --infer parser.mly

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

4

1 回答 1

2

编辑:生成的 parser.ml应该有对 Lexing 的引用。Sedlexing 用于创建lexbuf您发送到解析器的内容,但解析器并不关心该 lexbuf 是由 Lexing 还是 Sedlexing 创建的,只要它可以使用类似Lexing.lex_start_pandLexing.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)。

于 2015-06-16T06:56:30.350 回答