这个语法LR(1)?

时间:2015-03-28 02:49:38

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

对这种语法是否含糊不清有点困惑

C' -> C
C -> d C u C
C -> d C
C -> ε

我尝试为此建立DFA,但我在其中一个州得到了这个:

C -> d C DOT u C, $
C -> d C DOT, $

这不是一个转移 - 减少冲突,所以它肯定意味着语法不是LR(1)?或者它是否会减少,因为$和u都在C的后续集合中?

1 个答案:

答案 0 :(得分:3)

确实存在减少转移的冲突。这是通过选择班次生成的状态机。冲突处于状态4. state machine

我应该指出你的问题有点过了。语法可以是明确的,但仍然不是LR(1)。

但这个恰好是模棱两可的。考虑字符串ddudu。最左边的两个推导是

C'->C->dCuC->ddCuCuC->dduCuC->ddudCuC->dduduC->ddudu
C'->C->dCuC->ddCuC->dduC->ddudCuC->dduduC->ddudu

这些存在意味着语法含糊不清。

证明一般语法含糊不清是一个不可判定的问题:它可能没有算法。令人高兴的是,这一点并不那么难以解决。