Санкт-Петербургский государственный университет математико-механический факультет кафедра системного программирования Алгоритм исправления ошибок при анализе в парсерах типа перенос-свертка, основанный на предположении об избыточности языка Дипломная работа студента 545 группы Ефимова Андрея Александровича Научный руководитель ст. преп. Кириленко Я.А. Рецензент 2008 г к.ф.-м.н. Лукичев А.С. Введение Устаревшая документация Избыточные грамматики Разработка новых грамматик Постановка задачи 3 подхода обработки ошибок: 1. 2. 3. Обнаружение ошибок (error detection) Восстановление при ошибках (error recovery) Исправление ошибок (error correction) Обзор алгоритмов 1. 2. 3. 4. Специальные методы Обработка ошибок на уровне фраз Локальная обработка ошибок Глобальная обработка ошибок Управляющая таблица a Грамматика a(+a)* 0) S -> E $ 1) E -> E + E 2) E -> a 0 + $ s1 2 1 r2 r2 2 s2 s3 3 accept 4 5 E s1 5 r1 r1 S Управляющая таблица a Грамматика a(+a)* 0) S -> E $ 1) E -> E + E 2) E -> a 0 s1 1 r2 2 p’+’2 3 + $ p’a’1 p’a’1 r2 r2 s2 s3 E 2 accept 4 s1 5 r1 p’a’1 p’a’1 r1 r1 5 S Пример разбора строки с ошибкой Стек 0 0a1 0E2 0E2+4 0E2+4a1 0E2+4E5 0E2 0E2$3 Входная строка Действие ’.aa$’ ’.a$’ ’.a$’ ’.a$’ ’.$’ ’.$’ ’.$’ ’.’ shift, go to 1 reduce rule 2 push ‘+’, go to 4 shift, go to 1 reduce rule 2 reduce rule 1 shift, go to 4 accept Пример работы инструмента Кратко: state 0: accept only ’a’ symbol; default: push ’a’, go to 1 state 2: accept only ’+’ symbol; default: push ’+’, go to 4 state 4: accept only ’a’ symbol; default: is push ’a’, go to 1 total 3 default pushes Подробнее: state 0 0 $accept: . E $end 1 E: . E ’+’ E 2 | . ’a’ $default push symbol ’a’, and go to state 1 Результаты анализа ANSI C Лишние скобки (всего 15): selection_statement -> IF ’(’ expression ’)’ statement Лишние точки с запятой (всего 4): jump_statement: CONTINUE ';' Идентификаторы (всего 7): jump_statement -> GOTO IDENTIFIER ’;’ Цикл DO…WHILE: iteration_statement -> DO statement WHILE ’(’ expression ’)’ ’;’ expression -> expression ’,’ assignment_expression Результаты Дан обзор существующих методов исправления ошибок Предложен алгоритм исправления ошибок, на основе предположения о возможной избыточности грамматики Реализован инструмент анализа грамматики на избыточность на основе Bison (2.3-1) Полученный инструмент проверен на нескольких грамматиках существующих языков программирования