什么是规范的LR(1)项目!我读过龙书,它让我困惑,(delta,gamma,toh,......)
有人可以帮我解决这个问题吗?
这是什么意思? [A - >; alpha.Bbeta,a]
非常感谢..
答案 0 :(得分:2)
[A -> alpha . B beta , a]
基本上意味着“假设规则A
正在扩展,到目前为止我们已经看到alpha
。我们希望看到B beta
。我们也知道A
之后{1}},我们将看到a
“
因此,在CLR(1)中,您的状态包含其中一些项目。然后你有很多选择:
first(B)
的成员,假设您有B->gamme C
之类的规则,那么您可以“转移”并转到包含{{1}的状态}}。正如您所看到的,[B -> gamma . C, beta]
已移过.
(因为gamma
已匹配且gamma
的关注为B
,因为这是beta
之后的内容B
1}}在规则A -> alpha B beta
。a
并且假设B beta
可以生成lambda
(空字符串)(此处,假设beta是可以生成lambda
的非终结符号)。然后,您可以“缩小”并转到包含C -> something A . a something_else, follow]
等规则的状态。在这种情况下,您已确定堆栈上的alpha
,B
和beta
可以归为一个A
。这是我解释这个问题最简单的方法。
答案 1 :(得分:1)
这意味着什么:
[A - > alpha.Bbeta , a]
是在尝试解析(目标语言的子串)时可以将其视为非终结 A ,是否已经看到 alpha ,并且(“ “)接下来预计 Bbeta ,如果看到非终结元素,如果下一个标记为 a >,那么它是有效的 A 强>
(我认为你错误地转录了Bbeta,这本书可能是测试版)。