使用Menhir和Sedlex

9

我需要使用menhir和sedlex进行某些原因(utf-8)的操作,但不知道如何使生成的解析器依赖于Sedlexing而不是Lexing。有什么提示吗?

当我运行时

menhir --infer parser.mly

生成的程序中有带有 Lexing... 的行。我可以手动更改它,但肯定还有其他方法,对吗?
1个回答

2

编辑:生成的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)的规则)。请注意保留HTML标签。

尝试运行您的最后一个命令(我不使用ocamlbuild),但生成的“parser.ml”仍然依赖于“Lexing”... - Olle Härstedt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接