SLR(1)或LR(1)解析

时间:2013-10-17 19:11:13

标签: parsing context-free-grammar lr

如果我们找到类型

的产品,我们会发现以下(A)
  

A→α

这里α可以是ε吗?

喜欢在下面的例子中:

  

P→aPa | bPb | ε

如果α可以是ε,则不是LR(1)

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)语法的语言恰好是确定性的无上下文语言,并且所有偶数长度的回文集都不是确定性的无上下文语言。

希望这有帮助!