关于LR(0),有些东西我还不完全理解。我想弄清楚什么时候语法不是LR(0)。据我所知,我构建了LR(0)项自动机。那我需要寻找冲突。但我认为我并不完全理解LR(0)项目自动机中的两个项之间的冲突。这部分有可能澄清吗?我什么时候知道LR(0)项目自动机中存在冲突?如果能看到一两个例子(而不是语法本身,而是两个与某种类型有冲突的项目),将会很有帮助。
例如:
S ::= T C
T ::= char
T ::= int
C ::= [ num ] C
C ::= ''我得到:

为什么在4到8之间会有冲突?
发布于 2021-02-18 23:09:24
没有“4到8之间的冲突”。(这是没有意义的,因为解析机器总是处于一种状态。)这两个州(独立)中的每一个都有冲突。
LR(0)解析器不能使用前瞻性来预测操作,因此每个状态都必须具有:
的相同的缩减操作
这意味着,如果状态的项目集中有一个项目,其末尾是.(即可还原项),那么它必须是项目集中的唯一项。任何其他项目要么是转移,要么是不同的削减。对于机器中的状态4和8,情况并非如此;它们都有项C ::= •,以及其他不以•结尾的项。
https://stackoverflow.com/questions/66268824
复制相似问题