Алгоритм Айронса по исправлению ошибок

 

Пусть xjy — куст исходной программы, где x — построенная часть, jy — недостроенная часть, jÎVT

1. Строим список L из литер недостающих частей неполных кустов.

2. Головной терминальный символ j в цепочке jy проверяется и отбрасывается (при этом каждый раз получается новая цепочка jy) до тех пор, пока не найдется такой символ j, что будет иметь место V=>* j... (выводимость).

3. Определяется неполный куст, ставший причиной появления ошибки.

4. Определяется терминальная цепочка q. Если её поставить перед j, то продолжение разбора приведёт к правильной привязке к неполному кусту, найденному на шаге 3, и всем кустам поддерева. Для каждого такого куста генерируется цепочка терминалов, до полного поддерева, а катенация этих цепочек дает q.

5. Цепочка q вставляется непосредственно перед j и разбор продолжается, начиная с головного символа цепочки q, который становится входным.

Для нашего примера цепочка X º {i=i+}

j º ) jy º );

xjy, jÎVt

1) L = {;, T, +}

2) j º ); P ® A;

Необходимо вставить цепочку q, чтобы дополнить E®T{+T}, при этом проще всего в качестве цепочки q, рассмотреть символ i. (q = i).

Тогда дерево будет иметь следующий вид (рис. 5.20.).

Рис. 5.20. Дерево с нейтрализацией ошибки