【发布时间】:2011-06-17 16:39:15
【问题描述】:
我听说“真正的编译器编写者”使用自己的手工解析器而不是使用解析器生成器。我还听说解析器生成器不适合现实世界的语言。据推测,有许多特殊情况很难使用解析器生成器来实现。我对此表示怀疑:
- 理论上,GLR 解析器生成器应该能够处理大多数编程语言设计(可能除了 C++...)
- 我知道至少一种使用解析器生成器的生产语言:Ruby [1]。
- 当我在学校上编译器课程时,我们使用了解析器生成器。
所以我的问题是:使用解析器生成器编写生产编译器是否合理,或者编译器社区认为使用解析器生成器是一个糟糕的设计决策?
【问题讨论】:
-
真正的程序员使用面包板。
-
我以为他们用的是蝴蝶xkcd.com/378
-
GLR 解析器可以很好地处理 C++。我们的工具使用 GLR 来解析各种 C++ 方言和其他 30 种语言。 (有关“我们的工具”,请参阅我的简历)。
-
为 C++ 编写所有解析器规则,甚至 C++0x 并使用解析器生成器并没有那么难,但是即使您使用最好的 C++ 解析器,您也永远无法获得手工解析器的性能发电机。而解析 C++ 的性能非常重要。
-
@Gene 为什么手工解析器会击败 C++ 解析器生成器?考虑到写一个手工解析器是很多代码,是不是手工解析器可能会慢很多?
标签: parsing compiler-construction parser-generator