我试图证明 LL(3)不是LR(2)的子集。
直观地说这很容易,但我不能指出我的直觉来找到这样的语法。
你可以帮我一把吗?谢谢你的帮助答案 0 :(得分:3)
嗯,显然诀窍是使用ε-制作。
以下语法可行:
S->aa|Aaaa
A->ε
答案 1 :(得分:3)
定理:如果语法是LL(3)而不是LR(2),那么语法就有ε-产生。
证明:语法是LL(3),如果在读取三个字符超过句柄的开头后,总是可以以正确的句子形式识别句柄
语法是LR(2),如果在读取句柄的两个字符之后总是可以以正确的句子形式识别句柄。
如果语法是LL(3)但不是LR(2),那么读取句柄开头之后的三个字符有时必须提供比读取句柄末尾两个字符更多的信息。只有当句柄为空时才会发生这种情况。