c++ - 为什么不能使用 LEX/YACC 为编译器解析 C++?

标签 c++ compiler-construction bison yacc

我知道这是有原因的,但我还没有找到关于为什么 LEX/YACC 不能用于 C++ 的简洁明了的解释。 我也很想知道 LEX/YACC 是否可以用于解析 Objective C,或者该语言是否存在同样的问题。 (请注意,我指的是 ObjC,而不是 Obj-C++。) 谢谢。

最佳答案

当然可以使用 lex 和 yacc 来解析 c++,但您还需要许多其他机器。曾几何时,gcc 使用基于 yacc 的解析器,但后来被手工构建的递归下降解析器所取代,后者被认为更易于维护,并且更容易生成有意义的语法错误。出于同样的原因,clang 使用手工构建的递归下降解析器。

Bison 可以构建 GLR 解析器,这使得探索替代解析(消歧规则所必需)变得容易得多。请参阅 Ira Baxter 对 Are GCC and Clang parsers really handwritten? 的回答有关 C++ 的 GLR 解析的一些证词。

另请参阅 Matthew Slattery 对同一问题的回答中的链接,了解 gcc 和 clang 的一些背景知识;特别是,在 gcc wiki 上可以找到 2008 年替换 gcc 中旧的 yacc 解析器的成本和 yield 摘要。 (从 Matthew Slattery 复制的链接)。

关于c++ - 为什么不能使用 LEX/YACC 为编译器解析 C++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16410541/

相关文章:

c++ - 错误 : No matching overloaded function found

c++ - 警告 : comparison between signed and unsigned integer expressions. 。如何解决?

javascript - Typescript 生成的 JavaScript 有一个不是函数的函数

yacc - 是否有任何活跃的 Lex 和 Yacc IRC?

c - 这个 Bison 语法有什么问题?

Bison 错误输出

c++ - 如何编写使用临时容器的范围管道?

c++ - 计算排序数组的成对绝对和的中位数的高效算法

java - 如何使用 stringtokenizer 构建扫描器

C 编程语言中的字符作为整数