Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Все_пособие_редактир.doc
Скачиваний:
175
Добавлен:
31.10.2018
Размер:
2.51 Mб
Скачать

Стек Вход

$ w$

Синтаксический анализатор работает путем переноса нуля или нескольких символов в стек до тех пор, пока на вершине стека не окажется основа β. Затем он свертывает β левой части соответствующей продукции. Синтаксический анализатор повторяет этот цикл, пока не будет обнаружена ошибка или он не придет в конфигурацию, когда в стеке находится только стартовый символ, а входной буфер пуст:

Стек Вход

$S $

Попав в эту конфигурацию, синтаксический анализатор прекращает работу и сообщает об успешном разборе входной строки.

Пример 21

Последовательность действий, выполняемых синтаксическим анализатором при разборе входной строки id1+id2*id3 грамматики из примера 19, используя первое порождение примера, показана на рис. 32.

Стек

Вход

Действие

  1. $

  2. $id1

  3. $E

  4. $E +

  5. $E + id2

  6. $E + E

  7. $E + E *

  8. $E + E*id3

  9. $E + E*E

  10. $E + E

  11. $E

id1+id2* id3$

+id2* id3$

+id2* id3$

id2* id3$

* id3$

* id3$

id3$

$

$

$

$

Перенос

Свертка по Eid

Перенос

Перенос

Свертка по E id

Перенос

Перенос

Свертка по E id

Свертка по E*E

Свертка по E+E

Допуск

Рис. 32. Конфигурации ПС-анализатора для входной строки id1+id2*id3

Основными операциями синтаксического анализатора являются перенос и свертка, но на самом деле ПС-анализатор может выполнять четыре действия: (1) перенос, (2) сверт­ка, (3) допуск, (4) ошибка.

  1. При переносе очередной входной символ переносится на вершину стека.

  2. При свертке синтаксический анализатор распознает правый конец основы на вер­шине стека, после чего он должен найти левый конец основы и принять решение о том, каким нетерминалом заменить основу.

  3. При допуске синтаксический анализатор сообщает об успешном разборе входной строки.

  4. При ошибке синтаксический анализатор обнаруживает ошибку во входном потоке и вызывает программу восстановления после ошибок.

Замечание. Синтаксический анализатор для получения очередной основы переносит нуль или несколько символов в стек. Синтаксический анализатор никогда не заглядывает внутрь стека в поисках правого края основы. Все это делает стек особенно удобным для использования в реализации ПС-анализатора.

7.3 Конфликты в процессе пс-анализа

Существуют контекстно-свободные грамматики, для которых ПС-анализ не применим. Любой ПС-анализатор для такой грамматики может достичь конфигурации, в которой синтаксический анализатор по информации о содержимом стека и об очередном входном символе не в состоянии решить, должен ли он использовать перенос или свертку (конфликт перенос/свертка), либо какая из нескольких возможных сверток должна применяться (конфликт свертка/свертка).