Parsing 检查语法歧义

Parsing 检查语法歧义,parsing,compiler-construction,grammar,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}. 我想知道的是,这足以证明给出这个证据的语法是否含糊不清。或者集合应该是FirstY={b}。要证明语法是不明确的,只需证明至少有两种不同的方法可以得到结果 考虑到您的示

下面是一段语法的摘录,我想看看它是否模棱两可

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}.

我想知道的是,这足以证明给出这个证据的语法是否含糊不清。或者集合应该是FirstY={b}。

要证明语法是不明确的,只需证明至少有两种不同的方法可以得到结果

考虑到您的示例和您的编辑,您的语法确实不明确,因为您可以通过以下方式导出表达式b:

第一种方式:

Y -> b
第二种方式:

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

这是一个模棱两可的语法。

要证明一个语法是模棱两可的,你只需要证明至少有两种不同的方法可以得到结果

考虑到您的示例和您的编辑,您的语法确实不明确,因为您可以通过以下方式导出表达式b:

第一种方式:

Y -> b
第二种方式:

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

这是一个模棱两可的语法。

我想你已经证明了它不是LL1Grand,只是意味着我必须完成它并构造解析表。我想你已经证明了它不是LL1Grand只是意味着我必须完成它并构造解析表。很好奇看到这样的集合。我应该注意到,在这个例子中,E实际上是ε,所以是的,你是对的。我应该注意到,在这个例子中,E实际上是ε,所以是的,你是对的。