0

我目前正在使用 http://jsmachines.sourceforge.net/machines/lr1.html上的工具查看两个闭包计算示例

示例 1

S -> A c
A -> b B
B -> A b

在这里,在初始状态下以闭包结束:

[S -> .A c, $]; [A -> .b B, c]}

示例 2

S -> A B
A -> a
B -> b
B -> ''

计算的第一步闭合是:

{[S -> .A B, $]; [A -> .a, b/$]}

在示例 1 中,为什么规则 3 中的 b 不包含在前瞻中?在案例 2 中,我们遵循 B 来确定 $ 是前瞻的一部分,那么是否有一些特殊的理由不考虑案例 1 中的所有规则?

4

1 回答 1

1

当使用 ".A α" 进行闭包时,我们使用 FIRST(α) 作为前瞻,并且仅在 ε ∈ FIRST(α) 时包含包含(父)前瞻。在示例 1 中,ε ∉ FIRST(c),所以前瞻只是 c。在示例 2 中,ε ∈ FIRST(B),因此我们将包含前瞻(在本例中为 $)添加到前瞻中。

FOLLOW 永远不相关。

于 2019-08-18T22:39:20.630 回答