我偶然发现了一个非常奇怪的案例: 考虑
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)是否也是如此?
答案 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 !!