Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по тяпу.docx
Скачиваний:
8
Добавлен:
01.04.2025
Размер:
808 Кб
Скачать
☆

19. Разбор методом «сдвиг – свертка» (shift – reduce) на основе стека.

Анализатор пытается строить дерево разбора для входной последовательности, начиная с листьев и работая по направлению к корню дерева (вверх). Этот процесс можно рассматривать как свертку строки w к стартовому символу грамматики.

Этот метод, как и LL(1) анализатор использует стек. В самом начале лежит $ и буфер в котором содержится входная последовательность в конце которой лежит $-конец. В процессе работы выполняются следующие команды: сдвиг (входная последовательность переносится в стек) свертка (когда в стеке образуется необходимая часть правила и происходит замена); допуск (успешное завершение разбора)

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

Структура анализатора:

В процессе анализа используется стек, в котором хранятся пары вида xiSi, где xi – символ терминал или нетерминал грамматики, а Si – символ, характеризующий состояние автомата. Каждый символ состояния выражает информацию, содержащуюся в стек ниже него, а комбинация символа состояния в вершине стека и текущего символа входной последовательности используется для индексации таблиц анализа. В итоге совокупность xi в стеке содержит префикс правой сентенциальной формы. Комбинация состояний и текущего символа входной последовательности определяет действие на данном шаге разбора. В начале стек содержит начальное состояние и знак дна стека $. Алгоритм процедуры LR разбора: Чтение состояния хранящееся в вершине стека и текущий символ входной последовательности. Используя эти значения из таблицы action выбирается команда синтаксического анализатора. Таблица Goto содержит состояния, когда переход происходит по нетерминалу.

В алгоритме использование стека оправдано потому, что правая часть продукции в стеке может сформироваться только на поверхности.

Для нашего алгоритма будет использоваться стек для хранения начальной последовательности сентенциальной формы и входной буфер для исходной строки.

Стек Буфер

$ W$

Анализ работы:

1. Сдвигают 0 или более символов из буфера в стек, так чтобы в вершине стека оказалась основа В, затем сворачивает В нетерминалами левой части правила. Этот процесс повторяется до тех пор, пока не будет обнаружена ошибка или не возникает конфигурация стеке $S, а в буфере $.

Стек Буфер

$ S $

Этот алгоритм должен выполнить 4 операции:

1)Сдвиг-символ из буфера заносим в стек.

2)Свертка-анализатор определяет, что в стеке находится основа, затем на левую часть правила.

3)Принимается, когда анализатор обнаруживает, что состояние соответствует успешному разбору.

4)Ошибка – обнаруживается ошибки и запускается приложение обработки ошибки.

Самое важное- нахождение основы.