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 предыдущего разбора |