LR* анализ. Обработчик ошибок

Задача

построить LR*-распознаватель с обработчиком ошибок для языка формул высказываний, содержащих только с учетом приоритета операций:

Грамматику построить легко:

Построенная грамматика не является однозначной

Построим LALR-автомат (для построения можно использовать этот способ)

Заполнение таблицы анализатора

Комментарий: после работы распознавателя ошибок невозможно восстановить вывод обрабатываемой цепочки

Пример разбора цепочки без ошибок

Приведем пример разбора цепочки

ТактСтекОбрабатываемое словоДействие
1Находимся в состоянии , на каретке видим символ (смотрим в таблицу ACTION анализатора)
Перенос
Кладем состояние в стек
Переходим в состояние
Сдвигаем каретку на один символ вправо
2Находимся в состоянии , на каретке видим символ (смотрим в таблицу ACTION анализатора)
Свертка (свертка по правилу )
Вытаскиваем из стека одно состояние (число вытаскиваемых элементов равно размеру цепочки в правой части правила, по которому происходит свертка)
Кладем в стек (смотрим в таблицу GOTO анализатора) ( потому что этот символ оказался на вершине стека после вытаскивания элементов в предыдущем пункте. , потому что в правиле, по которому происходит свертка, левая часть равна )
Переходим в состояние
3Перенос
Рассуждения, аналогичные такту 1
4Перенос
Рассуждения, аналогичные такту 1
5Перенос
Рассуждения, аналогичные такту 1
6Свертка
Рассуждения аналогичные такту 2
7Свертка
Рассуждения аналогичные такту 2
8Перенос
Рассуждения, аналогичные такту 1
9Перенос
Рассуждения, аналогичные такту 1
10 Свертка
Рассуждения аналогичные такту 2
11 Свертка 2
Рассуждения аналогичные такту 2
12 Свертка
13 x V x ∧ x Находимся в состоянии , на каретке видим конец строки (смотрим в таблицу ACTION анализатора)
допуск

Пример разбора цепочки с ошибками. Выявление ошибок

Приведем пример разбора цепочки

ТактСтекОбрабатываемое словоДействие
1Перенос
Рассуждения, аналогичные такту 1 предыдущего разбора
2Свертка
Рассуждения, аналогичные такту 2 предыдущего разбора
3Перенос
Рассуждения, аналогичные такту 1 предыдущего разбора
4Перенос
Рассуждения, аналогичные такту 1 предыдущего разбора
5Находимся в состоянии , на каретке видим (смотрим в таблицу ACTION анализатора)
Ошибка (пропустили операнд, вставить x)
Вставляем перед кареткой
6Перенос
Рассуждения, аналогичные такту 1 предыдущего разбора
7Свертка
Рассуждения, аналогичные такту 2 предыдущего разбора
8Свертка
Рассуждения, аналогичные такту 2 предыдущего разбора
9Перенос
Рассуждения, аналогичные такту 1 предыдущего разбора
10Перенос
Рассуждения, аналогичные такту 1 предыдущего разбора
11 Свертка
Рассуждения, аналогичные такту 2 предыдущего разбора
12 Свертка 2
Рассуждения, аналогичные такту 2 предыдущего разбора
13 Свертка
14 допуск
Рассуждения, аналогичные такту 13 предыдущего разбора