我被问到LL(3)是否是LR(2)的子集,反之亦然。
我成功地证明LL(3)不是LR(2)的子集:
在LL(3)中,我们可以在读完3个字符后识别规则。
在LR(2)中,我们可以在读完两个字符后识别规则。
因此,说规则是空的(upsilon),那么LL(3)会给我们提供比LR(2)更多的信息。因此,LL(3)不包含在LR(2)中。
我如何证明另一种方式?
答案 0 :(得分:1)
这https://cs.stackexchange.com/a/48表示这些语言集都不是其他语言的子集。
更新:实际上它声明LL(3)是LR(2)的子集,抱歉。
答案 1 :(得分:0)
根据我的编译器构建课程中的幻灯片。
LR(k)= LR(1)是任何LL(k)的超集
因此,LR(2)或LR(1)是LL(3)或任何LL(k)的超集
从链接中查看图片。 Languages diagram. LR(k), LL(k)
我无法证明这一点,但是很显然LR(k)| k> = 1,比LL(k)| |任何k,因为LL(k)不支持左递归语法。