检查语法歧义

时间:2012-12-30 14:40:11

标签: parsing compiler-construction grammar

以下是一段语法的摘录,我试图看它是否含糊不清。

Y->b
Y->Z
Z->bW
W->d
W->ϵ

当我计算第一组语法时,我偶然发现了Y的第一个不规则性。

First(Y) = {b,First(Z)}
First of Z = b so I have the set First(Y)={b,b}.

我想知道的是足以证明给出这些证据的语法是否具有暧昧性。或者该集合应为First(Y) = {b}

1 个答案:

答案 0 :(得分:4)

要证明语法含糊不清,您只需要证明至少有两种不同的方法可以达到结果。

考虑到您的示例,并考虑您的编辑,您确实有一个含糊不清的语法,因为您可以通过以下方式派生表达式b

Y -> b
Y -> Z
Z -> bW
Y -> d
W -> ϵ

第一种方式:

Y -> b

第二种方式:

Y -> Z
Y -> Z -> bW
Y -> Z -> bW -> bϵ
Y -> Z -> bW -> bϵ -> b

这是一个含糊不清的语法。