如果我们找到类型
的产品,我们会发现以下(A)A→α
这里α可以是ε吗?
喜欢在下面的例子中:
P→aPa | bPb | ε
如果α可以是ε,则不是LR(1)
答案 0 :(得分:1)
是的,α可以是ε。 α表示任意串,并且因为ε是串,所以它可能是α
因此,你的语法不是LR(1),因此它也不是SLR(1)(因为所有SLR(1)语法也是LR(1))。
为了看到这一点,我们可以构造LR(1)配置集:
(1) P' -> .P ($)
P -> .aPa ($)
P -> .bPb ($)
P -> . ($)
(2) P -> a.Pa ($)
P -> .aPa (a)
P -> .bPb (a)
P -> . (a)
此时我们可以停止,因为有一个转移/减少的混淆:我们无法判断是否转移a
或减少P→ε给定终端a
。
通过一些更高级的数学,你可以证明这种语言有 no LR(1)语法(所有偶数长度的回文的语言)。这是因为具有LR(1)语法的语言恰好是确定性的无上下文语言,并且所有偶数长度的回文集都不是确定性的无上下文语言。
希望这有帮助!