Parsing 这是LR(1)语法吗?

Parsing 这是LR(1)语法吗?,parsing,compiler-construction,grammar,context-free-grammar,lr,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的follow集合中,它是否会减少 它确实具有减少冲突的功能。这是通过选择shift生成的状态机。冲突发生在第4状态 我应该指出你的问题有点离题。语法可

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

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的follow集合中,它是否会减少

它确实具有减少冲突的功能。这是通过选择shift生成的状态机。冲突发生在第4状态

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

但这一点恰好是可以证明的模棱两可。考虑字符串<代码> DDUDU < /代码>。最左边的两个派生是

C'->C->dCuC->ddCuCuC->dduCuC->ddudCuC->dduduC->ddudu
C'->C->dCuC->ddCuC->dduC->ddudCuC->dduduC->ddudu
这些词的存在说明语法是模糊的


证明一般语法歧义是一个无法确定的问题:它不可能有算法。幸运的是,这个问题并不难解决。

这个问题属于cs.stackexchange.com。如果你编写编译器,这是一个非常好的编程问题。我同意Gene的观点。类似的编程问题是,“我已经检查了我的代码。我看到一个看起来可疑的地方。我能在那里得到一个下标错误吗,或者有一个我应该知道的规则来阻止它吗?”出于好奇,你用什么来生成图形?bison生成一个vcg文件,yComp绘制它。