Обсуждение предметов LR (1): значение? - PullRequest
0 голосов
/ 07 февраля 2012

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 07 февраля 2012

[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.

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

1 голос
/ 07 февраля 2012

IIRC, это «элемент», то есть потенциальное состояние синтаксического анализа какой-либо формы предложения.

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

[A - > alpha.Bbeta , a]

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

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

...