我试图证明LL(3) 不是 LR(2) 的子集。
直觉上这很容易,但我不能凭直觉找到这样的语法。
你能帮我一把吗?谢谢你的帮助
好吧,显然诀窍是使用 ε-产生式。
以下语法将起作用:
S->aa|Aaaa
A->ε
定理:如果文法是 LL(3) 而不是 LR(2),则文法有 ε-产生式。
证明:如果在阅读句柄开头的三个字符后总是可以以正确的句子形式识别句柄,则文法是 LL(3) 。
如果在读取句柄末尾的两个字符后总是可以以正确的句子形式识别句柄,则文法是 LR(2) 。
如果语法是 LL(3) 而不是 LR(2),那么读取句柄开头之后的三个字符有时必须比读取句柄结尾之后的两个字符提供更多的信息。只有当句柄为空时才会发生这种情况。