LR(1) 前瞻中考虑了哪些产品?

Which productions are considered in LR(1) lookahead?

我目前正在查看两个使用该工具的闭包计算示例 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 中的所有规则?

当使用“.A α”进行闭包时,我们使用 FIRST(α) 作为前瞻,并且仅在 ε ∈ FIRST(α) 时包括包含(父)前瞻。在示例 1 中,ε ∉ FIRST(c),因此向前看就是 c。在示例 2 中,ε ∈ FIRST(B),因此我们将包含 lookahead ($ in this case) 添加到 lookahead.

FOLLOW 永远不相关。