7

哪个词法分析器/解析器生成器对于 C 或 C++ 来说是最好的(最容易使用、最快的)?我现在正在使用 flex 和 bison,但 bison 只处理 LALR(1) 语法。我正在解析的语言实际上并不需要无限前瞻,但无限前瞻会使解析变得容易得多。我应该尝试 Antlr 吗?可可/R?猎鹿犬?还有什么?

4

7 回答 7

5

2015 年 1 月 5日更新

我的原始答案指向一个现已删除的问题:

在你推荐什么解析器生成器中已经有很多关于这个问题的好答案

因此,我从archive.org 上的已删除答案中获取了项目列表,其中至少有 1 票:

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

于 2009-09-24T05:53:49.400 回答
3

坏消息是大多数真正的计算机语言不是“LALR(1)”,这意味着你必须求助于相当多的黑客才能让 YACC 解析真正的语言。

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

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

于 2009-06-20T02:51:08.777 回答
1

ANTLR 使用 'backtrack' 选项使无限前瞻变得非常容易。它还可能符合您的“最容易使用、最快”的标准,因为它具有 ANTLRWORKS,可让您可视化和调试语法。

另一个优点是,它内置了对构建 AST 的支持,这使得构建 AST 变得非常容易,而这在 bison 中是缺失的。

出版了两本书——“ANTLR: Definitive guide”和“Language design patterns”,它是可用的工具之一。您还有一个非常活跃的邮件列表。

于 2009-10-15T04:40:17.700 回答
0

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

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

于 2009-03-30T15:59:49.573 回答
0

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

于 2009-03-30T16:08:20.880 回答
0

最新的野牛声称可以通过(实际上)同时进行多个解析来进行无限前瞻。如果您已经对野牛进行了投资,那么可能值得尝试一下,而不是切换到另一个包。

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

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

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

于 2009-09-28T01:08:58.430 回答
0

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

于 2013-05-16T20:14:59.663 回答