我目前正在使用 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 中的所有规则?