Для действительно приятного лечения парсинга LR/SLR/LALR я бы рекомендовал The Dragon Book.
Построение элементов LR (1) в разделе 4.7.2, процедура CLOSURE
.
Для примера, рассмотрите выполнение "расширение" (в CLOSURE
) в (1) пункта S->.L=R,$
LR: результат являются LR (1) статьи
L->.*R,=
L->.id,=
В lookaheads каждый терминальный символ в FIRST("=R$")
, то есть все, что следует за нетерминалом перед точкой, плюс взгляд, в этом вопросе новые позиции выглядят как =
.
Далее рассмотрите «расширение» S->.R,$
. Опять же, новички в новых элементах - все символы терминала в FIRST("$"
): ничего не следует за R
, следовательно, только просмотр. Это создает элемент
R ->.L,$
Дальнейшее расширение этого пункта, используя в качестве lookaheads все нетерминалы в FIRST("$")
дает нам
L->.*R,$
L->.id,$
Таким образом, вы можете увидеть, что L->.*R,=/$
в вас оригинальный пример просто сокращенная обозначение для двух отдельных предметов, L->.*R,=
и L->.*R,$
, каждое из которых получено по отдельным цепям расширения.
Большое спасибо! Теперь все ясно!! : D – JEricaM