我如何看出 LR(0) 项自动机中存在冲突?

How do I see that there is a conflict in the LR(0) items automata?

关于 LR(0),有些事情我没有完全理解。我想弄清楚什么时候语法不是 LR(0)。据我了解,我构建了 LR(0) 项自动机。然后我需要寻找冲突。但我不认为我完全理解 LR(0) 项自动机中的两项之间何时发生冲突。 是否可以澄清这部分的内容?我什么时候知道 LR(0) 项自动机中是否存在冲突?看到一两个例子会很有帮助(不是针对语法本身,而是针对有某种冲突的两个项目)。

例如:

S ::= T C
T ::= char
T ::= int
C ::= [ num ] C
C ::= ''

我得到:

为什么4和8有冲突?

不存在“4和8之间的冲突”。 (这没有意义,因为解析机总是处于一种状态。)两种状态中的每一种(独立地)都有冲突。

LR(0) 解析器无法使用前瞻来预测操作,因此每个状态必须具有:

  1. 每个输入的移位转换,或
  2. 每个输入的相同减少操作

这意味着如果状态的项集中有一个项目的末尾带有 •(即可归约项),那么它必须是项目集中的唯一项目。任何其他项目要么是转移,要么是不同的减少。对于您机器中的状态 4 和 8,情况并非如此;他们都有项目 C ::= •,以及其他不以 .

结尾的项目