Обсуждение предметов LR(1): значение?

Что такое канонический LR(1) предметов! Я прочитал Книгу Дракона, Меня это смущает, (дельта, гамма, тох,...)

Может ли кто-нибудь помочь мне с этим вопросом?

Что это значит на английском? [A - > alpha.Bbeta, a]

Большое спасибо..

2 ответа

Решение

[A -> alpha . B beta , a] в основном означает "принятие правила A расширяется, пока мы видели alpha, Затем мы ожидаем увидеть B beta, Мы также знаем, что после Aмы увидим a"

Итак, в CLR(1) у вас есть состояния, состоящие из некоторых из этих элементов. Тогда у вас есть много вариантов:

  • Если прогноз (гамма) является членом first(B)и при условии, что у вас есть правило, такое как B->gamme Cзатем вы можете "сдвинуться" и перейти в состояние, содержащее [B -> gamma . C, beta], Как видите, . перешел прошло gamma (так как gamma соответствует и следование B является beta потому что это то, что пришло после B в правиле A -> alpha B beta,
  • Если прогноз a и предполагая B beta может генерировать lambda (пустая строка) (здесь предположим, что бета-версия - нетерминал, который может генерировать lambda). Затем вы можете "уменьшить" и перейти в состояние, содержащее такие правила, как C -> something A . a something_else, follow], В этом случае вы решили, что alpha, B а также beta в стеке можно сгруппировать в один A,

Это был самый простой способ объяснить это.

IIRC, это "элемент", то есть потенциальное состояние синтаксического разбора.

Что это значит:

[A - > alpha.Bbeta , a]

является то, что при попытке проанализировать (подстрока целевого языка), который может рассматриваться как нетерминал A, была ли замечена альфа, и (".") что Bbeta ожидается следующим, и что если элементы нетерминала видно, это действительный A, если следующий токен является.

(Я думаю, что вы расшифровали Bbeta неправильно, вероятно, это была бета-версия в книге).

Другие вопросы по тегам