Lexer /解析器工具

时间:2009-03-30 14:24:21

标签: parsing antlr bison lexer flex-lexer

对于C或C ++,哪种词法分析器/解析器生成器是最好的(最容易使用,最快)?我现在正在使用flex和bison,但是bison只处理LALR(1)语法。我正在解析的语言不是真的需要无限的前瞻,但无限的前瞻会使解析很多更容易。我应该试试Antlr吗?可可/ R? Elkhound?还有别的吗?

7 个答案:

答案 0 :(得分:5)

已更新 2015-01-05:

我的原始回答指向现已删除的问题:

  

What parser generator do you recommend

中已经有很多关于这个问题的好答案

所以我已经从deleted answer on archive.org获得了至少一票的项目清单:

我自己已经完成了几个flex / bison系统,但是现在我用sqlite中的Lemon替换它们,因为它是一个工具,可重入且线程安全以及具有基于流/拉的模型

答案 1 :(得分:3)

坏消息是,大多数真正的计算机语言都不是“LALR(1)”,这意味着你必须诉诸相当多的hackery来让YACC解析真正的语言。

如果您正在设计DSL,您可以使用任何LALR解析器生成器而不会有很多麻烦,因为您可以在解析器生成器发出尖叫声时更改DSL的语法。 LL解析器生成器也在这里工作也是出于同样的原因,但缺少左递归可能是一个真正的痛苦。

如果你不喜欢你的语法方式,那么GLR解析器就是不可思议的赢家。我们在DMS Software Reengineering Toolkit中使用它们,并为包括C ++在内的大约30多种语言构建了生产质量解析器,其中有一个民间定理说它几乎不可能解析。民间定理是由人们使用LL和LALR解析器来尝试处理C ++而开始的。 GLR很容易做到。

答案 2 :(得分:1)

ANTLR使用'backtrack'选项可以轻松实现无限前瞻。它也可能符合您“最容易使用,最快”的标准,因为它具有ANTLRWORKS,可让您可视化和调试语法。

另一个优点是它通过内置的构建AST的支持使得AST构建变得非常容易,而野生动物中缺少它。

出版了两本书 - “ANTLR:权威指南”和“语言设计模式”,它是可用的文档之一。您还有一个非常活跃的邮件列表。

答案 3 :(得分:0)

我不知道你到底在找什么, 但我认为Boost Xpressive值得一看......

不是一个解析器生成器,而是一个处理语法的好工具,我觉得它可以处理奇怪的。

答案 4 :(得分:0)

我一直在使用GOLD解析系统(http://www.devincook.com/goldparser),效果非常好。我的项目很小,是C语言中NC文件的解析系统。 但我认为该工具也可以处理更复杂的项目。

答案 5 :(得分:0)

最新的野牛声称通过(实际上)同时进行多次解析来做无限前瞻。如果你已经投资了野牛,那么可能值得尝试这一点,而不是转向另一个包。

http://www.gnu.org/software/bison/manual/bison.html#GLR-Parsers

我自己并没有使用过这个功能。

就其他系统而言,我使用过ANTLR。我并不特别喜欢它(文档不是很好,并且必须手动考虑一个人的语法以满足运算符优先级),但它确实有效,并且很多人发誓它当然值得一看。

答案 6 :(得分:0)

LRSTAR 9.1可以生成LR(1)和LR(*)解析器。它是一个基于C ++的系统,对Windows和Visual Studio友好。它创建了表驱动的解析器和表驱动的词法分析器,它们小而且编译速度快。 LRSTAR解析器可以自动构建AST。