以下哪项陈述是错误的?
(A)一个明确的文法具有相同的最左和最右推导
(B) LL(1) 解析器是自顶向下的解析器
(C) LALR 比 SLR 更强大
(D)对于任何 k,二义性文法永远不会是 LR(k)答案:(一)
解释: 1.如果存在一个字符串s 使得该文法对 s 有多个最左边的派生,则该文法是二义性的。我们还可以为字符串提出多个最右边的推导来证明上述命题,但不能同时对最右边和最左边进行推导。一个明确的文法可以有不同的最右边和最左边的派生。
2. LL 解析器本质上是自顶向下的。最左边的推导直观地是在时尚中扩展或自上而下,因此是这样的约定。另一方面,最右边的推导似乎是一种压缩或自下而上的事情。
3. LALR 比 SLR 更强大,即使两者都具有相同的 LR(0) 状态,因为 SLR 在构建解析表后通过查看语法中的 FIRST 和 FOLLOW 来检查前瞻,另一方面, LALR 在构建解析表时从 LR(0) 状态计算前瞻,这是一种更好的方法。
4.歧义文法永远不可能是任何 k 的 LR(k),因为 LR(k) 算法不是为了处理歧义文法而设计的。如果用在歧义文法上,无论常数 k 有多大,它都会陷入不可判定性问题。
参考:http://stackoverflow.com/questions/2676144/what-is-the-difference-between-lr-slr-and-lalr-parsers/16575211#16575211
参见 https://www.geeksforgeeks.org/compilers-set-1/ 的问题 3
此解决方案由Vineet Purswani 提供。
这个问题的测验