【发布时间】:2011-05-18 00:19:31
【问题描述】:
似乎递归下降解析器不仅解释最简单,而且设计和维护也最简单。它们不仅限于 LALR(1) 语法,而且代码本身可以被普通人理解。相比之下,自下而上的解析器对其能够识别的语法有限制,并且需要通过特殊工具生成(因为驱动它们的表几乎不可能手动生成)。
那么,为什么自下而上(即 shift-reduce)解析比自上而下(即递归下降)解析更常见?
【问题讨论】:
-
纯递归下降与 LL(1) 大致相同,严格来说不如 LALR(1) 强大。您可以构建递归下降解析器并使用前瞻黑客、上下文检查(如 GCC 的原始 C++ 解析器所做的那样)等来欺骗,以处理更复杂的语言。但是如果你要作弊,你也可以用 LALR 解析器作弊。因此,当允许任意作弊时,很难比较技术。您可以说作弊更容易侵入手动编码的解析器。但是,最好不要作弊,只需使用非常强大的解析引擎即可。看我的回答。
标签: parsing context-free-grammar