我不知道我是否误解了正在发生的事情,或者维基百科的解释是否不正确。
FOLLOW(k,B)
一个项目集k
和一个非终结符B
的集合是所有项目的后续集合的并集,K
其中'•'
后面是B
。
他们的示例语法如下所示:
S → E
E → T
E → ( E )
T → n
T → + T
T → T + n
他们发现 LR(0) 项集 0 为:
[S → • E]
[E → • T]
[E → • ( E )]
[T → • n]
[T → • + T]
[T → • T + n]
这意味着,那FOLLOW(0,T)
是项目集 0 中所有项目的后续集的并集,其中 '•' 后跟T
。
应用他们的逻辑,我们得到“项目集 0 中的项目,其中 '•' 后跟T
”实际上是这两个项目:
[E → • T]
[T → • T + n]
但是,这就是我卡住的地方:
第二个的后续集合包含符号)
,因为该项目[E → • ( E )]
可以生产[E → • ( T )]
,这意味着 a)
必须在后续集合中。
但是,维基百科说FOLLOW(0,T) = { $, '+' }
.
我究竟做错了什么?