ВОССТАНОВЛЕНИЕ ТЕКСТА ФОРТРАН-ПРОГРАММЫ ИЗ ВНУТРЕННЕГО ПРЕДСТАВЛЕНИЯ СИСТЕМЫ КОМПИЛЯТОРОВ GCC Выполнила: студентка 527 группы Алексашина Татьяна Михайловна.

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



Advertisements
Похожие презентации
П РЕОБРАЗОВАНИЕ ПРОГРАММ НА ЯЗЫКЕ C-DVM В ПРОГРАММЫ ДЛЯ КЛАСТЕРОВ выполнила: студентка 527 группы Коваленко Алина Игоревна научный руководитель: профессор,
Advertisements

Новиков Сергей Анализ потока управления и потока данных в программе.
Внутреннее представление компилятора Типы представлений и их особенности.
Динамическое программирование. Основные концепции Федор Царев, Андрей Лушников Спецкурс «Олимпиадное программирование» Лекция Санкт-Петербург,
Реализация индексного анализа для деревьев циклов любого вида сложности Выполнил : студент 818 гр. Юдин Павел Научный руководитель : к. т. н. Муханов Л.
Языки программирования.. Этапы создания программы. Для представления алгоритма в виде, понятном компьютеру, служат языки программирования. Сначала разрабатывается.
Глобальный оптимизатор для.NET приложений Серебрянский Андрей 544гр. Научный руководитель: Дмитрий Степанович Ломов Рецензент: Дмитрий Юрьевич Булычев.
Проверка эквивалентности срединной и линейной осей многоугольника Дипломная работа студента 545 группы Подколзина Максима Валериевича Санкт-Петербургский.
МОДЕЛИРОВАНИЕ в среде программирования QBasic Учитель: Гуляева Т.В. г.Павлово, 2008 год.
Распределение регистров при планировании инструкций для архитектуры Эльбрус Дипломная работа Иванова Д. С. Научный руководитель Шлыков С. Л. Москва 2008.
Линейные программы на Паскале. Основные понятия: Программирование- раздел информатики, посвященный методам разработки программ управления компьютером.
Языки и методы программирования Преподаватель – доцент каф. ИТиМПИ Кузнецова Е.М. Лекция 3.
Теория языков программирования и методы трансляции Тема 8 Генерация кода.
ЕГЭ 2011 Информатика и ИКТ Консультация 3 18 марта.
Задание бинарных деревьев с помощью массивов Обходы деревьев.
как подготовить информацию к обработке на компьютере как воспользоваться компьютером для обработки информации.
Языки и методы программирования Преподаватель – доцент каф. ИТиМПИ Кузнецова Е.М. Лекция 7.
Дипломная работа Ивановой О.О., группа 545 Научный руководитель: д. ф.-м. н., профессор Терехов А.Н. Генерация кода по диаграмме активностей.
ПОТОКО-ЧУВСТВИТЕЛЬНЫЙ АНАЛИЗ УКАЗАТЕЛЕЙ ЯЗЫКА С, ОСНОВАННЫЙ НА ДИАГРАММАХ ДВОИЧНЫХ РЕШЕНИЙ Санкт-Петербургский Государственный Университет Математико-Механический.
Зимняя Школа Параллельного Программирования 2011 Проект «Фрагментированное Программирование» : генератор графа фрагментированной программы для алгоритма.
Транксрипт:

ВОССТАНОВЛЕНИЕ ТЕКСТА ФОРТРАН-ПРОГРАММЫ ИЗ ВНУТРЕННЕГО ПРЕДСТАВЛЕНИЯ СИСТЕМЫ КОМПИЛЯТОРОВ GCC Выполнила: студентка 527 группы Алексашина Татьяна Михайловна Научный руководитель: профессор, д. ф-м. н. Крюков Виктор Алексеевич Москва, 2011

Текст программы и промежуточное представление Компиляторы используют в своей работе промежуточное представление. На уровне промежуточного представления можно проводить оптимизации и трансформации программы. Необходимо вернуться из промежуточного представления к тексту программы на исходном языке программирования для того, чтобы: o увидеть произведенные изменения; o иметь возможность использовать другие компиляторы для работы с измененной программой. 2

Постановка задачи Требуется разработать и реализовать алгоритм восстановления текста программы на языке Фортран из внутреннего представления GIMPLE системы компиляторов GCC. Полученная программа должна быть «читаема» и близка к исходной. 3

Компилятор GCC Back End Front End C parser C++ parser Fortran parser Java parser RTLAssembly 4

Компилятор GCC версии 4.0 Back End Middle End Front End C parser C++ parser Fortran parser Java parser GENERICGIMPLERTLAssembly 5

GIMPLE FortranHigh GIMPLELow GIMPLE if ( foo(a+b, c) ) c = (b+1)/a endif t1 = a+b t2 = foo(t1, c) if (t2 != 0) t3 = b+1 c = t3/a endif t1 = a+b t2 = foo(t1, c) if (t2 != 0) L1: t3 = b+1 c = t3/a goto L3 L2: L3: 6

Построение решения задачи Решение поставленной задачи строится для языка Фортран-77. Для проведения анализа внутреннего представления используется библиотека UTL (Universal Translating Library). Внутреннее представление программы получается от модифицированного компилятора GCC в виде xml-файла с описанием семантики. 7

Граф потока управления GIMPLE: t1 = a+b t2 = foo(t1, c) if (t2 != 0) t3 = b+1 c = t3/a endif Entry Exit if (t2 != 0) t1 = a+b t2 = foo(t1, c) t3 = b+1 c = t3/a 8

Алгоритм восстановления текста Алгоритм восстановления текста основан на обходе графа потока управления. С помощью графа потока управления и дерева циклов восстанавливается структура исходной программы. Для восстановления описания переменных проводится дополнительный анализ внутреннего представления. Удаляются вспомогательные переменные, введенные компилятором, восстанавливаются управляющие структуры. 9

Алгоритм восстановления текста: восстановление структуры Entry Exit if (t2 != 0) t1 = a+b t2 = foo(t1, c) L1: t3 = b+1 c = t3/a Запишем в файл текст каждой вершины в процессе обхода графа потока управления. Содержимое файла: t1 = a+b t2 = foo(t1, c) if (t2 != 0) then goto L1 else goto L1 endif Хотим получить: if (t2 != 0) then else endif L2 10

Алгоритм восстановления текста: восстановление структуры Entry Exit if (c1) if (c2) if (c3) … … … … … Граф потока управления: Обходим граф потока управления снизу вверх и строим граф, в вершинах которого текст на Фортране: Exit … … … … … … … 11

Алгоритм восстановления текста: восстановление структуры Exit … … if (c3) then else endif … Exit … … … … … … … … 12

Алгоритм восстановления текста: удаление вспомогательных переменных GIMPLE: t1 = a+b t2 = foo(t1, c) if (t2 != 0) t3 = b+1 c = t3/a endif ( t1, a+b ) ( t2, foo(a+b, c) ) ( t3, b+1 ) Ассоциативный массив Текст на Фортране: if ( foo(a+b, c) != 0) c = (b+1)/a endif 13

Схема работы программы восстановления текста Модифицированный компилятор GCC Файл с текстом исходной программы на языке Фортран Файл с текстом программы на языке Фортран xml-файл с описанием семантики исходной программы Разработанная программа восстановления текста 14

Результаты Разработан и реализован алгоритм восстановления текста Фортран-программы из представления GIMPLE. Разработанный алгоритм может быть расширен для работы с другими языками высокого уровня. В дальнейшем: o усовершенствование и оптимизация алгоритма; o возможность работы программы восстановления текста с другими языками программирования высокого уровня. 15