Обсуждение предметов 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 неправильно, вероятно, это была бета-версия в книге).