Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемДарья Широпоршнева
1 Восстановление текстов программ по преобразованному синтаксическому дереву Выполнил: Юрий Литвинов, 545гр. Научный руководитель: Дмитрий Копаев
2 Введение Одна из задач реинжиниринга – преобразование программ к виду, пригодному для сопровождения После различных преобразований над программой (удаление мёртвого кода, реструктуризация) необходимо породить текстовое представление Результат генерации должен выглядеть, как правка исходной программы
3 Постановка задачи Порождённый текст должен содержать возможно больше промежутков, скопированных из исходного файла Текст, порождённый по дереву, должен естественным образом вписываться в неизменённый текст Алгоритм должен накладывать возможно меньшие ограничения на входное дерево
4 Обзор предыдущего решения Принцип работы основного прохода заключался в обходе дерева в глубину и печати текста узла следующим образом: Печатается текст от начала узла до начала первого сына Печатается текст сына Печатается текст между сыновьями Печатается текст от конца последнего сына до конца узла Недостатки: должен быть известен порядок сыновей, требует соответствия структуры дерева структуре исходного файла 01 A PIC X OCCURS A PIC X OCCURS 20.
5 Трудные ситуации 1 Простейший пример: удаление сына f(a, b, c) Пусть в результате преобразования один из параметров функции был удалён. Если просто удалить его текст, получим f(a,, c) Требуется перегенерация всего узла по дереву, при этом сыновья могут быть сгенерированы по привязке
6 Трудные ситуации 2 Неизвестный порядок сыновей Синтаксические элементы в тексте могут идти в произвольном порядке, тогда как порядок узлов в дереве фиксирован 01 A PIC X OCCURS A OCCURS 10 PIC X. При генерации сыновей в порядке, в котором они входили в дерево, порождается неверный текст: 01 A OCCURS 10 PIC X 10 PIC X.
7 Трудные ситуации 3 Несинтаксические элементы Некоторые элементы текста программы отсутствуют в дереве: 01 A PIC X. EJECT 01 B PIC X. 01 C PIC X. Положим, 01 B PIC X. удалили. Получим 01 A PIC X. 01 C PIC X. Должны получить 01 A PIC X. EJECT 01 C PIC X.
8 Идеи предлагаемого алгоритма Для каждого узла определяется его прообраз в тексте Полученные промежутки сортируются по привязке Промежутки с неизвестной привязкой вставляются в порядке, определяемом синтаксическими правилами и расположением привязанных промежутков Над цепочками промежутков могут выполняться дополнительные преобразования (разбиение по строкам, анализ копибуков и т.д.) 01 A PIC X OCCURS A PIC X OCCURS 20.
9 Преимущества предлагаемого подхода Порядок узлов в дереве не имеет значения Возможно порождение элементов текста, не являющихся частью синтаксиса программы Для алгоритма не важна вложенность и непрерывность привязок
10 Заключение Предлагаемый алгоритм реализован и используется для генерации текстов программ на языках COBOL и RPG в системе Modernization Workbench Алгоритм позволяет генерировать по привязке больше промежутков, чем предыдущий алгоритм, и при этом накладывает меньшие ограничения на дерево Реализация позволяет поддерживать новые языки, описывая только синтаксические правила и некоторые особенности языка
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.