5

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

4

1 回答 1

3

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

Bison 可以构建 GLR 解析器,这使得探索替代解析(消歧规则所必需)变得更加容易。请参阅 Ira Baxter 对GCC 和 Clang 解析器真的是手写的吗?有关 C++ 的 GLR 解析的一些证词。

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

于 2013-05-07T03:58:03.670 回答