讨论LR(1)项目:意思?

时间:2012-02-06 22:17:59

标签: parsing compiler-construction lr

什么是规范的LR(1)项目!我读过龙书,它让我困惑,(delta,gamma,toh,......)

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

这是什么意思? [A - >; alpha.Bbeta,a]

非常感谢..

2 个答案:

答案 0 :(得分:2)

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

因此,在CLR(1)中,您的状态包含其中一些项目。然后你有很多选择:

  • 如果前瞻(gamma)是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]等规则的状态。在这种情况下,您已确定堆栈上的alphaBbeta可以归为一个A

这是我解释这个问题最简单的方法。

答案 1 :(得分:1)

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

这意味着什么:

[A - > alpha.Bbeta , a]

是在尝试解析(目标语言的子串)时可以将其视为非终结 A ,是否已经看到 alpha ,并且(“ “)接下来预计 Bbeta ,如果看到非终结元素,如果下一个标记为 a ,那么它是有效的 A 强>

(我认为你错误地转录了Bbeta,这本书可能是测试版)。