首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LR(1)项的讨论:含义?

LR(1)项的讨论:含义?
EN

Stack Overflow用户
提问于 2012-02-07 06:17:59
回答 2查看 385关注 0票数 0

什么是规范的LR(1)项!我读过“龙书”,它把我搞糊涂了,(delta,gamma,toh,...)

有人能帮我解决这个问题吗?

这在英语中的意思是什么?A-> alpha.Bbeta,a

非常感谢..

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-07 06:23:20

[A -> alpha . B beta , a]基本上意味着“假设规则A正在扩展,到目前为止,我们已经看到了alpha。然后我们期望看到B beta。我们还知道,在A之后,我们将看到a。”

因此,在CLR(1)中,您具有由其中一些项组成的状态。这样你就有了很多选择:

  • 如果超前(gamma)是first(B)的成员,并且假设您有一个诸如B->gamma C的规则,那么您可以"shift“并转到包含[B -> gamma . C, beta]的状态。正如您所看到的,代码已经移动到了gamma (因为gamma是匹配的,并且B的后跟是beta,因为这是规则A -> alpha B beta.
  • If中B之后的内容,所以先行是a,并假设B beta可以生成lambda (空字符串)(这里,假设beta是可以生成<代码>D23的非终结符))。然后,您可以"reduce“并转到包含C -> something A . a something_else, follow]等规则的状态。在本例中,您已经决定可以将堆栈上的alphaBbeta分组到一个A.

这是我能解释的最简单的方法。

票数 3
EN

Stack Overflow用户

发布于 2012-02-07 06:24:48

IIRC,这是一个“项”,即某个句子形式的潜在状态句法分析。

这意味着:

代码语言:javascript
复制
[A - > alpha.Bbeta , a]

当试图解析(目标语言的子字符串)时,可以认为是非终结符A,是已经看到的alpha,以及(".")接下来预期是Bbeta,并且如果看到非终端的元素,则如果下一个令牌是a,则它是有效的A

(我认为你转录Bbeta是错误的,它可能是书中的beta )。

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

https://stackoverflow.com/questions/9168175

复制
相关文章

相似问题

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