Метод Айронса

 

Основная идея — по контексту без возврата отбрасывать литеры, которые привели к тупиковой ситуации (когда продолжение анализа по грамматике невозможно) и разбор продолжается. Для иллюстрации метода рассмотрим грамматику:

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) исправление допущенной ошибки и дальнейший нормальный анализ.