什么是规范的LR(1)项!我读过“龙书”,它把我搞糊涂了,(delta,gamma,toh,...)
有人能帮我解决这个问题吗?
这在英语中的意思是什么?A-> alpha.Bbeta,a
非常感谢..
发布于 2012-02-07 06:23:20
[A -> alpha . B beta , a]基本上意味着“假设规则A正在扩展,到目前为止,我们已经看到了alpha。然后我们期望看到B beta。我们还知道,在A之后,我们将看到a。”
因此,在CLR(1)中,您具有由其中一些项组成的状态。这样你就有了很多选择:
first(B)的成员,并且假设您有一个诸如B->gamma C的规则,那么您可以"shift“并转到包含[B -> gamma . C, beta]的状态。正如您所看到的,代码已经移动到了gamma (因为gamma是匹配的,并且B的后跟是beta,因为这是规则A -> alpha B beta.B之后的内容,所以先行是a,并假设B beta可以生成lambda (空字符串)(这里,假设beta是可以生成<代码>D23的非终结符))。然后,您可以"reduce“并转到包含C -> something A . a something_else, follow]等规则的状态。在本例中,您已经决定可以将堆栈上的alpha、B和beta分组到一个A.中
这是我能解释的最简单的方法。
发布于 2012-02-07 06:24:48
IIRC,这是一个“项”,即某个句子形式的潜在状态句法分析。
这意味着:
[A - > alpha.Bbeta , a]当试图解析(目标语言的子字符串)时,可以认为是非终结符A,是已经看到的alpha,以及(".")接下来预期是Bbeta,并且如果看到非终端的元素,则如果下一个令牌是a,则它是有效的A。
(我认为你转录Bbeta是错误的,它可能是书中的beta )。
https://stackoverflow.com/questions/9168175
复制相似问题