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 永远不相关。
我目前正在查看两个使用该工具的闭包计算示例 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 永远不相关。