Восстановление текстов программ по преобразованному синтаксическому дереву Выполнил: Юрий Литвинов, 545гр. Научный руководитель: Дмитрий Копаев.

Презентация:



Advertisements
Похожие презентации
М.Ю. Харламов, ВНУ им. В.Даля, Генерация объектного кода это перевод компилятором внутреннего представ­ления исходной программы в цепочку символов.
Advertisements

Введение в теорию компиляции Основные принципы построения трансляторов.
Обобщение метода кодирования Хаффмана с использованием систем счисления Ковалёв Д.С. Новосибирский Государственный Университет Факультет Информационных.
Разработка архитектуры для генератора синтаксических анализаторов Выполнил: Улитин Константин Научный руководитель: Я.А. Кириленко Курсовая.
Двусвязность Лекция 14. Связность компонент Граф G называется k-связным (k 1), если не существует набора из k-1 или меньшего числа узлов V` V, такого,
Базы данных Назначение и основные функции Гусельникова Е.В. МБОУ Лицей 130 имени академика М.А.Лаврентьева Новосибирск, 2011.
Язык высокого уровня компилятор Программа компиляторов Сделал:Студент группы:Ис-2о(очная)Воротов Валентин.
Система автоматизации распараллеливания: DVM-эксперт Блюменберг Э.П. 528 Научный руководитель: профессор В.А. Крюков.
Дипломная работа Программная поддержка морфемного словаря Швейкина О.А., 525 гр. Научный руководитель: к.ф.-м.н. доцент Большакова Е.И.
Оптимизация управляющего графа программ, имеющих избыточные условные вычисления Выполнил: Степнов Денис, 816 гр. Научный руководитель: Бучнев А.Ю. Выпускная.
1 Тема 1.7. Алгоритмизация и программирование Информатика.
МЕТОД КОЙКА Предположим,что для описаний некоторого процесса используется модель с бесконечным лагом вида: Предположим,что для описаний некоторого процесса.
Многометодные процедуры оптимального управления Архитектура и реализация программного комплекса Исследовательский Центр процессов управления Работа выполнена.
Дипломная работа Ивановой О.О., группа 545 Научный руководитель: д. ф.-м. н., профессор Терехов А.Н. Генерация кода по диаграмме активностей.
Троицкий Д.И. Лингвистическое и программное обеспечение САПР 1 Классификация грамматик и языков Лекция 9 Кафедра «Автоматизированные станочные системы»
Решение заданий части С Подготовка к ЕГЭ по информатике.
Применение теории кодирования в криптографии Лось Антон Васильевич.
Даталогическое проектирование. 1. Представление концептуальной модели средствами модели данных СУБД Общие представления о моделях данных СУБД С одной.
Метод Ньютона: 1- и 2-я интерполяционные формулы Ньютона.
Расположение связей на диаграмме Савин Н.С. 345 гр. Научный руководитель Ю. Литвинов.
Транксрипт:

Восстановление текстов программ по преобразованному синтаксическому дереву Выполнил: Юрий Литвинов, 545гр. Научный руководитель: Дмитрий Копаев

Введение Одна из задач реинжиниринга – преобразование программ к виду, пригодному для сопровождения После различных преобразований над программой (удаление мёртвого кода, реструктуризация) необходимо породить текстовое представление Результат генерации должен выглядеть, как правка исходной программы

Постановка задачи Порождённый текст должен содержать возможно больше промежутков, скопированных из исходного файла Текст, порождённый по дереву, должен естественным образом вписываться в неизменённый текст Алгоритм должен накладывать возможно меньшие ограничения на входное дерево

Обзор предыдущего решения Принцип работы основного прохода заключался в обходе дерева в глубину и печати текста узла следующим образом: Печатается текст от начала узла до начала первого сына Печатается текст сына Печатается текст между сыновьями Печатается текст от конца последнего сына до конца узла Недостатки: должен быть известен порядок сыновей, требует соответствия структуры дерева структуре исходного файла 01 A PIC X OCCURS A PIC X OCCURS 20.

Трудные ситуации 1 Простейший пример: удаление сына f(a, b, c) Пусть в результате преобразования один из параметров функции был удалён. Если просто удалить его текст, получим f(a,, c) Требуется перегенерация всего узла по дереву, при этом сыновья могут быть сгенерированы по привязке

Трудные ситуации 2 Неизвестный порядок сыновей Синтаксические элементы в тексте могут идти в произвольном порядке, тогда как порядок узлов в дереве фиксирован 01 A PIC X OCCURS A OCCURS 10 PIC X. При генерации сыновей в порядке, в котором они входили в дерево, порождается неверный текст: 01 A OCCURS 10 PIC X 10 PIC X.

Трудные ситуации 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.

Идеи предлагаемого алгоритма Для каждого узла определяется его прообраз в тексте Полученные промежутки сортируются по привязке Промежутки с неизвестной привязкой вставляются в порядке, определяемом синтаксическими правилами и расположением привязанных промежутков Над цепочками промежутков могут выполняться дополнительные преобразования (разбиение по строкам, анализ копибуков и т.д.) 01 A PIC X OCCURS A PIC X OCCURS 20.

Преимущества предлагаемого подхода Порядок узлов в дереве не имеет значения Возможно порождение элементов текста, не являющихся частью синтаксиса программы Для алгоритма не важна вложенность и непрерывность привязок

Заключение Предлагаемый алгоритм реализован и используется для генерации текстов программ на языках COBOL и RPG в системе Modernization Workbench Алгоритм позволяет генерировать по привязке больше промежутков, чем предыдущий алгоритм, и при этом накладывает меньшие ограничения на дерево Реализация позволяет поддерживать новые языки, описывая только синтаксические правила и некоторые особенности языка