我正在寻找 OCaml 中的 LL(1) 解析器生成器...有人可以帮我吗?
4 回答
好吧,LALR 解析器可以解析可以被 LL 解析器解析的语言的严格超集。所以我建议只使用 Ocaml 附带的 ocamlyacc,它是一个 LALR(1) 解析器生成器。这可能需要对语法进行一些小的重写,但应该不会太难。
camlp4 中包含的流解析器(据我所知)是 LL(1) 解析器。见 http://caml.inria.fr/pub/docs/manual-camlp4/manual003.html
Planck LL(n) 解析器组合库:https ://bitbucket.org/camlspotter/planck/overview
它从我的玩具项目开始,没有实际用户,但我可以用普朗克实现 OCaml 语法词法分析器/解析器,与原件 100% 兼容。
我不建议使用它,但如果你有兴趣......试试吧。
我听说过关于Menhir的好消息
主页在顶部说:
Menhir 是用于 OCaml 编程语言的 LR(1) 解析器生成器。也就是说,Menhir 将 LR(1) 语法规范编译为 OCaml 代码。Menhir 由 François Pottier 和 Yann Régis-Gianas 设计和实施。
Menhir 与 ocamlyacc 有 90% 的兼容性。Menhir 接受和编译遗留的 ocamlyacc 语法规范。生成的解析器运行并生成正确的解析树。