LR(2)解析器是LL(3)的子集吗?

时间:2013-04-27 14:04:08

标签: parsing lr ll

我被问到LL(3)是否是LR(2)的子集,反之亦然。

我成功地证明LL(3)不是LR(2)的子集:

在LL(3)中,我们可以在读完3个字符后识别规则。

在LR(2)中,我们可以在读完两个字符后识别规则。

因此,说规则是空的(upsilon),那么LL(3)会给我们提供比LR(2)更多的信息。因此,LL(3)不包含在LR(2)中。

我如何证明另一种方式?

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)不支持左递归语法。