好奇案例LL(1)与否?

时间:2014-03-03 15:45:58

标签: parsing compiler-construction context-free-grammar

我偶然发现了一个非常奇怪的案例: 考虑

1)       S -> Ax
2) & 3)  A->alpha|beta
4)       alpha-> b
5) & 6)  beta -> epsilon | x

现在我检查了这个语法并没有违反LL(1)语法的任何规则。但是当我构造解析表时,会发生一些冲突。

First Sets
S => {b,x}
A=>{b,x,epsilon}
alpha=>{b}
beta=> {x,epsilon}

Follow sets
S=> {$}
A => {x}
alpha => {x}
beta => {x}

Here is the parsing table **without considering** the RHS's which can produce 
epsilons
          x        b      $
S         1        1
A         3        2
alpha              b
beta      6

到目前为止一切顺利,但是当我们考虑可以得出epsilon的RHS时,我们会在表中发生冲突!

LL(1)是否也是如此?

2 个答案:

答案 0 :(得分:2)

  

LL(1)是否也是如此?

First(A)包含 x ,Follow(A)包含 x 。由于A可以导出为空,并且在First(A)和Follow(A)之间存在交集,因此它不是LL(1)。

答案 1 :(得分:0)

我很抱歉,这是我的错误。

实际上它并不满足LL(1)语法的所有规则

的β-> epsilon | X

因此,首先(x)^ follow(beta)应该是不相交的,但事实并非如此!!

Sorryy !!