Пусть 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. Дерево с нейтрализацией ошибки