生产编译器是否使用解析器生成器?

Mat*_*man 5 compiler-construction parsing parser-generator

我听说"真正的编译器编写者"使用自己的手工解析器而不是使用解析器生成器.我也听说过解析器生成器不会为真实语言剪切它.据说,使用解析器生成器很难实现许多特殊情况.我对此表示怀疑:

  1. 从理论上讲,GLR解析器生成器应该能够处理大多数编程语言设计(除了C++ ......)
  2. 我知道至少有一种使用解析器生成器的生产语言:Ruby [1].
  3. 当我在学校学习编译器课程时,我们使用了解析器生成器.

所以我的问题是:使用解析器生成器编写生成编译器,或使用解析器生成器被编译器社区认为是一个糟糕的设计决策是否合理?

[1] https://github.com/ruby/ruby/blob/trunk/parse.y

Bli*_*ndy 4

就其价值而言,我相信 GCC 在 4.0 之前使用了解析器生成器,然后改用手写的递归下降解析器,因为它更容易维护和扩展。

解析器生成器确实针对“真正的”语言进行了“剪切”,但是将语法转换为可行的东西的工作量呈指数级增长。

编辑:链接到 GCC 文档,详细说明了更改的原因以及收益与成本分析:http://gcc.gnu.org/wiki/New_C_Parser