首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何看到LR(0)项自动机中存在冲突?

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

Stack Overflow用户
提问于 2021-02-18 22:05:11
回答 1查看 89关注 0票数 0

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

例如:

代码语言:javascript
复制
S ::= T C
T ::= char
T ::= int
C ::= [ num ] C
C ::= ''

我得到:

为什么在4到8之间会有冲突?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-18 23:09:24

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

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

  1. 每个输入的移位转换,或
  2. 对每个输入

的相同的缩减操作

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66268824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档