Санкт-Петербургский государственный университет математико-механический факультет кафедра системного программирования

advertisement
Санкт-Петербургский государственный университет
математико-механический факультет
кафедра системного программирования
Алгоритм исправления ошибок при
анализе в парсерах типа перенос-свертка,
основанный на предположении об
избыточности языка
Дипломная работа
студента 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)
Полученный инструмент проверен на нескольких
грамматиках существующих языков
программирования
Download