【问题标题】:Parsing the Context-free-Grammars解析上下文无关文法
【发布时间】:2012-01-26 14:11:08
【问题描述】:

我知道自下而上的解析器比自上而下的解析器更好,因为它可以接受左递归语法,还有什么其他原因让我们更喜欢自下而上的解析而不是自上而下的解析?

【问题讨论】:

    标签: algorithm parsing ll lr


    【解决方案1】:

    从理论上讲,对于任何 k,LL(k) 文法始终是 LR(k) 文法的严格子集,因此确定性预测自下而上解析器可以接受比确定性预测自上而下解析器严格更大的文法集.这也意味着任何 LL(k) 文法也是 LR(k)。

    此外,一个棘手的证明表明,任何确定性 CFL(确定性下推自动机接受的 CFL)都具有 LR(1) 语法,这意味着 LR 语法与那些具有高效的基于堆栈的解析算法的语言精确对应.

    也就是说,如果您允许使用更通用的解析算法,例如 Unger 算法、Earley 算法或 CYK 算法,则存在用于解析任意 CFG 的自上而下和自下而上的方法。不过,这些算法可能比预测方法慢得多,因此它们通常不用于编程语言。

    希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      我们有像 byson 这样的自下而上的解析器生成器。使用它们比手动编写解析器要简单得多。
      此外,递归下降解析器默认使所有操作右关联,这对于算术是不正确的。将它们转回左关联需要额外的解析步骤。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多