Я не могу сказать, то ли я неправильно понимаю, что происходит, то ли объяснение Википедии неверно.
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 )]
, что означает, что )
должен быть в следующем наборе.
Однако Википедия говорит, что FOLLOW(0,T) = { $, '+' }
.
Что я делаю неправильно?