对于C或C++,哪个词法/解析器生成器是最好的(最容易使用,最快的)?我现在使用的是flex和bison,但是bison只处理LALR(1)语法。我正在解析的语言实际上并不需要无限的前瞻性,但是无限的前瞻性将使解析更加容易。我该试试安特尔吗?可可/雷射?埃尔克伦德?还有别的吗?
发布于 2009-09-24 05:53:49
更新的 2015-01-05:
我的原始答案指向一个现已删除的问题:
在您推荐什么解析器生成器?中已经有很多关于这个问题的好答案。
因此,我从删除archive.org上的答案上拿出了至少1张选票的项目清单:
我自己做过几个flex/bison系统,但现在我用sqlite中的柠檬替换这两个系统,因为它是一个工具,可重入和线程安全,还有一个基于流/拉的模型。
发布于 2009-06-20 02:51:08
坏消息是,大多数真正的计算机语言并不是"LALR(1)",这意味着您必须采取相当大的黑客手段使YACC解析真正的语言。
如果您正在设计DSL,您可以使用任何LALR解析器生成器,而不需要太多麻烦,因为您可以在解析器生成器发出吱吱声时更改DSL的语法。LL解析器生成器在这里也主要是出于同样的原因而工作,但是缺少左递归可能是一个真正的痛苦。
如果您喜欢语法的方式不包含,GLR解析器将成为赢家。我们在DMS软件重组工具包中使用它们,并为一些30+语言(包括C++ )构建了产品质量解析器,其中有一个民间定理,说它几乎不可能解析。民间定理是由人们使用LL和LALR解析器来尝试和处理C++开始的。GLR做起来很容易。
发布于 2009-10-15 04:40:17
ANTLR使无限的前瞻性非常容易使用‘回溯’选项。它还可能限定您的“最容易使用、最快”的标准,因为它有ANTLRWORKS,可以让您可视化和调试语法。
另一个优点是,它使AST的构建变得非常简单,它内置了对构建AST的支持,而在bison中,AST是缺失的。
随着两本书的出版-‘反two :权威指南’和‘语言设计模式’,它是一个非常好的文档工具可用。您也有一个非常活跃的邮件列表。
https://stackoverflow.com/questions/697442
复制相似问题