OCaml中的LL(1)解析器生成器

3

我正在寻找一个在OCaml中生成LL(1)语法分析器的工具... 有人能帮忙吗?


3
它不是叫做递归下降分析器吗?;-) OCaml/SML也有LEX/YACC工具,并且我相信还有许多解析器生成器/组合库。这篇文章想要表达什么,确切的说,可能需要进行一些研究并说出“类似这样,但不像那样”的内容。 - user166390
请不要在您的帖子中添加签名或标语。 - user229044
4个回答

3

LALR解析器可以解析LL解析器可解析语言的严格超集。因此,我建议使用ocamlyacc,它是Ocaml附带的LALR(1)解析器生成器。这可能需要对语法进行一些小的重写,但不应该太难。


3
在所有方面,menhir 都比 ocamlyacc 更加优秀。 - gasche
2
LALR(ocamlyacc)是LR(menhir)的严格子集; LR既不是LL的超集,也不反过来! - lambdapower

1

我听说过Menhir的好处。

主页顶部显示:

Menhir是OCaml编程语言的LR(1)解析器生成器。也就是说,Menhir将LR(1)语法规范编译成OCaml代码。Menhir由François Pottier和Yann Régis-Gianas设计和实现。

Menhir与ocamlyacc 90%兼容。Menhir接受并编译传统的ocamlyacc语法规范。生成的解析器可以运行并生成正确的解析树。


1
Planck LL(n)解析器组合库:https://bitbucket.org/camlspotter/planck/overview 这是我的玩具项目,目前没有实际用户,但我可以使用Planck实现与原始的OCaml语法词法分析器/解析器完全兼容。
我不建议使用它,但如果你感兴趣的话...可以试试看。

1

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