我很困惑 完全正确!!!!!!!
我在我的一篇教授笔记中阅读了以下示例。
1) 我们有一个 SLR(1) 语法 G,如下所示。我们使用 SLR(1) 解析器生成器并为 G 生成解析表 S。我们使用 LALR(1) 解析器生成器并为 G 生成解析表 L。
S->AB
A->dAa
A-> lambda (lambda is a string with length=0)
B->aAb
解:S中带有R(reduce)的元素数量多于L。
但在一个网站上我读到:
2) 假设 T1、T2 是用语法 G 的 SLR(1) 和 LALR(1) 创建的。如果 G 是 SLR(1) 语法,以下哪项是正确的?
a) T1 和 T2 没有任何区别。
b) T1 中非错误条目的总数低于 T2
c) T1 中的错误条目总数低于 T2
解决方案:
LALR(1) 算法生成的状态与 SLR(1) 算法完全相同,但它可以生成不同的动作;它能够解决比 SLR(1) 算法更多的冲突。但是,如果文法是 SLR(1),则两种算法将产生完全相同的机器(a 是正确的)。
任何人都可以为我描述其中哪些是真实的?
编辑:事实上,我的问题是为什么对于给定的 SLR(1) 语法,LALAR(1) 和 SLR(1) 的解析表完全相同,(错误和非错误条目相等,reduce 的数量相等)但是对于上面的文法,S 中 Reduced 的个数要多于 L。
我在另一本书中看到,我们通常有:
概括:
1)对于我在问题1中写的上述语法,为什么减少的数量不同?
2)如果我们有一个 SLR(1) 语法,为什么表是完全一样的?(减少和错误条目的数量变得相同)