Parsing SLR(1)或LR(1)解析

Parsing SLR(1)或LR(1)解析,parsing,context-free-grammar,lr,Parsing,Context Free Grammar,Lr,如果我们找到类型为的产品,我们会发现如下(A) A→ α 这里的α可以是ε吗 如以下示例所示: p→ aPa | bPb |ε 如果α可以是ε,它就不是LR(1)是的,α可以是ε。α表示任意字符串,因为ε是字符串,所以它可能是α 因此,您的语法不是LR(1),因此也不是SLR(1)(因为所有SLR(1)语法也都是LR(1)) 为此,我们可以构造LR(1)配置集: (1) P' -> .P ($) P -> .aPa ($) P -> .bP

如果我们找到类型为的产品,我们会发现如下(A)

A→ α

这里的α可以是ε吗

如以下示例所示:

p→ aPa | bPb |ε


如果α可以是ε,它就不是LR(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

通过一些更高级的数学,您可以证明这种语言(所有偶数长度回文的语言)没有LR(1)语法。这是因为具有LR(1)语法的语言正是确定性上下文无关语言,而所有偶数长度回文集不是确定性上下文无关语言


希望这有帮助

这很有帮助!谢谢!