3

我正在为 LL(1) 语法构建一个解析表,这一切都有意义,除了一个方面!?

下面的规则设置接缝冲突。

• 对于每个产生式 X → αAβ,将 FIRST (β) - {€} 放入 FOLLOW(A)
• 如果 € 在 FIRST (β) 中,则将 FOLLOW(X) 放入 FOLLOW(A)

它们是规则 1 和 2(3 不是问题)。

如果生产规则不符合规则 1,您如何实施规则 2?

那么有人可以巧妙地解释哪条规则适用于哪里吗?

4

1 回答 1

1

第一条规则说,如果后续集合在 A 的后续中包含 epsilon,则您将除 epsilon 之外的所有内容都放在 FIRST(β) 中。 epsilon 不应该在那里,因为 A 后面没有任何内容是不合法的。

第二条规则说,如果 β 可以是 epsilon,那么 X 之后的所有内容也是 A 的合法遵循,因为 β 可以从无中推导出来。

这些规则不是相互排斥的。您需要对每个生产应用所有规则,这不像生产符合规则 1,然后您不运行规则 2。您将运行所有规则,直到 FOLLOW 集稳定并且不再添加任何内容。

于 2012-08-21T17:44:10.930 回答