Основная идея — по контексту без возврата отбрасывать литеры, которые привели к тупиковой ситуации (когда продолжение анализа по грамматике невозможно) и разбор продолжается. Для иллюстрации метода рассмотрим грамматику:
G[P]:
1. P ® A
2. A ® i = E
3. E ® T{+T}
4. T ® O{*O}
5. O ® i | (E)
Представленная грамматика G[P] является усечением арифметического оператора присваивания, причём усечение выполнено на уровне операнда и операций. Это не нарушает общности грамматики и сделано для того, чтобы не увеличивать размерность синтаксического дерева.
Пример 5.4. i = i + )
Этот оператор присваивания явно не соответствует грамматике G[P]. Построим синтаксическое дерево для этой основы (рис.5.19).
Рис. 5.19. Дерево с диагностикой ошибки
В общем случае обнаружение ошибки соответствует следующей схеме разбора:
Z =>* X1X2 … Xi-1Xi … Xn,
где (X1X2 … Xi-1) — построенная часть куста; (Xi … Xn) — недостроенная часть куста ), которую нельзя построить с помощью G[Z].
Часто при диагностике, в тупиковой ситуации на экран выводится недостроенная часть или “хвост” сентенциальной формы. Задачей проектировщика процессора ошибок при нейтрализации является следующее:
1) недопущение ошибки, с целью дальнейшего разбора;
2) исправление допущенной ошибки и дальнейший нормальный анализ.