我知道自下而上的解析器比自上而下的解析器更好,因为它可以接受左递归语法,我们更喜欢自上而下的解析而不是自上而下的解析?
答案 0 :(得分:1)
从理论上讲,LL(k)语法总是对任何k的LR(k)语法的严格子集,因此确定性预测自下而上解析器可以接受比确定性预测自上而下解析器严格更大的语法集合。这也意味着任何LL(k)语法也是LR(k)。
此外,一个棘手的证据表明,任何确定性CFL(确定性下推自动机接受的CFL)都有LR(1)语法,这意味着LR语法精确对应那些具有高效的基于堆栈的解析算法的语言
也就是说,如果你允许更常用的解析算法,如Unger算法,Earley算法或CYK算法,那么就存在自上而下和自下而上的解析任意CFG的方法。但是,这些算法可能比预测方法慢得多,因此它们通常不用于编程语言。
希望这有帮助!
答案 1 :(得分:0)
我们有自下而上的解析器生成器,如byson。使用它们比手动编写解析器要简单得多 此外,递归下降解析器默认情况下使所有操作都是右关联的,这对于算术来说是不正确的。将它们转回到左关联需要解析附加步骤。