Главная » Все файлы » Просмотр файлов из архивов » PDF-файлы » Практикум «Оптимизирующие компиляторы» (на примере GCC)

Практикум «Оптимизирующие компиляторы» (на примере GCC), страница 7

PDF-файл Практикум «Оптимизирующие компиляторы» (на примере GCC), страница 7 Конструирование компиляторов (53255): Книга - 7 семестрПрактикум «Оптимизирующие компиляторы» (на примере GCC): Конструирование компиляторов - PDF, страница 7 (53255) - СтудИзба2019-09-18СтудИзба

Описание файла

PDF-файл из архива "Практикум «Оптимизирующие компиляторы» (на примере GCC)", который расположен в категории "". Всё это находится в предмете "конструирование компиляторов" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Просмотр PDF-файла онлайн

Текст 7 страницы из PDF

Пратт в книге «Языки программирования» приводит перечень свойствхорошего языка:• Ясность, простота и единообразие понятий языка• Ортогональность• Естественность для приложений• Поддержка абстракций• Удобство верификации программы• Среда программирования• Переносимость программ• Стоимость использованияПрактикум «оптимизирующие компиляторы»ƒ Стоимость выполнения программыƒ Стоимость трансляции программыƒ Стоимостьсоздания,тестированияииспользованияпрограммыƒ Стоимость сопровождения программыРазнообразие предметных областей и желание приблизить язык по уровнюабстракций и естественности представления алгоритма к каждой областипорождает новые и новые языки. Существенным компонентом оценкикаждого решения является стоимость, которая складывается из если невзаимоисключающих, то, по меньшей мере, несовместимых компонент.Конкретный выбор в пользу того или иного критерия делается взависимости от сферы применения компилятора. Так для компиляциибольшинства студенческих программ важно скорость компиляции инесущественна скорость исполнения.

Скорость компиляции важна и в JITкомпиляторах.Принятая модель классификации языков выделяет четыре основныевычислительные модели:• Императивные (процедурные) языки. Состояние машины – память.Программа – последовательность операторов. Исполнение операторавлечет изменения состояния памяти. Примеры: C, C++, FORTRAN,ALGOL, PL/1, Pascal, Ada, Smalltalk, COBOL.• Аппликативные (функциональные) языки. Начальное состояниемашины – память. Программа – композиция функций. Примеры: ML,Lisp.• Языки,основанныенасистемеправил(логическогопрограммирования). Программа – совокупность пар (разрешающееусловие, действие).

Примеры: Prolog, НБФ в YACC, Lex.Практикум «оптимизирующие компиляторы»• Объектно-ориентированное программирование. В этой моделистроятся сложные объекты данных и определяются операции надэтими объектами.На язык оказывает влияние и среда программирования. Преимущественнона возможности языка, упрощающие раздельную компиляцию и сборкупрограммы (модульность), и на возможности тестирования и отладкипрограммы.Архитектура также оказывает влияние на языки.

В основном причиноймодификации языка для архитектуры служит желание значительноповысить производительность конечной программы. Пример: OpenMPрасширение.Ключевым вопросом в реализации языка программирования является то,какое представление имеет программа во время её выполнения нареальном компьютере. В зависимости от реализации языка их делят на:• Компилируемые.

Языки C, C++, FORTRAN, Pascal, Ada принятосчитатькомпилируемыми.Трансляторкомпилируемогоязыкаобычно является довольно большой и сложной программой, имаксимальное значение имеет создание максимально эффективных сточки зрения исполнения программ.• Интерпретируемые. Языки LISP, ML, Perl, Postscript, Prolog иSmalltalkобычнореализуютсяспомощьюинтерпретаторов.Трансляторы таких языков обычно – сравнительно простыепрограммы.Основнаясложностьзаключаетсявреализацииинтерпретатора.Лексический и синтаксический анализыЗадача лексического анализатора состоит в чтении потока символов ивыдачи потока токенов.

Синтаксический анализатор получает строкуПрактикум «оптимизирующие компиляторы»токенов от лексического анализатора и проверяет, может ли эта строкапорождаться грамматикой исходного языка.ИсходнаяпрограммаТокенЛексическийанализаторСинтаксическийанализаторЗапрос наполучениеТаблицасимволовДля построения лексических анализаторов на основе спецификаций,использующих регулярные выражения, был создан ряд специальныхпрограммных инструментов. В приложении описан инструмент подназванием Lex.Для построения синтаксических анализаторов на основе спецификаций вприложении рассматривается генератор LALR-анализаторов Yacc.Front endВ GCC от языка зависит только Front end (часть компилятора,анализирующая программу на языке высокого уровня и преобразующая еёво внутреннее представление программы в компиляторе).Исходный кодна языкевысокогоуровняFront endЗависит от языка программированияРисунок 11Back endОбъектныйфайлПрактикум «оптимизирующие компиляторы»Front end.CC ParserC++C++ ParserJavaJava ParserFortran 95Objective-CBack end.RTLRTLOptimizerCodeGeneratorFortran 95Objective CРисунок 12Front end должен обеспечивать: лексический анализ, синтаксическийанализ, генерацию кода во внутреннем представлении.

Также front endможет включать предварительную оптимизацию: например, вычислениеконстантных выражений, упрощение арифметических выражений.Создание компилятора для нового языка в GCC означает создание новогоfront end-а.Обычно front end работает по схеме показанной на рисунке 13.Обрабатывая очередную лексему средствами функций предоставленныхGCC, формируется дерево, хранящее информацию о распознанном участкепрограммы.Центральной структурой данных в Front end является дерево (по формеочень похоже на дерево синтаксического разбора).

Узлы дерева способныхранить целые или вещественные числа, строки, операторы и пр. В общемслучае дерево не является универсальным для всех front end-ов.Практикум «оптимизирующие компиляторы»генерациявнутреннегопредставленияформированиедереваТекстовый файлИсходный кодпрограммы на языкевысокого уровняTreeДеревоRTLЯзыкпромежуточногопредставленияРисунок 13Как только завершается анализ осмысленного участка кода, генерируетсяфрагмент RTL кода на основании сформированного дерева.Практикум «оптимизирующие компиляторы»Создание собственного Front endВ данной главе описывается процесс создания игрушечного front end-аVMK.Создание собственного Front end достаточно хорошо описано в документеGCC Front end HOWTO от Sreejith K Menon.

Если Вы собираетесь начатьписать собственный Front end, то, несомненно, следует начать с прочтенияэтого документа.Имя каталога содержащего файлы с реализацией front end совпадает сименем языка и располагается в папке gcc.Как правило, никто не создает front end с нуля. Для этого с GCC идетстандартный пример treelang. Нужно скопировать его в свой каталог иначать модифицировать.Файлы, которые получились в результате первого этапа (копированиястандартного front end-а и смены имен) представлены в Таблице 4.Таблица 4ФайлНазначениеChangeLogИстория вашего font end’а.

Файл необязателен, но этикеттребует его присутствия.Make-lang.inВключается в главный makefile в каталоге gcc. Его главнаяроль – вызвать makefile в каталоге языка. Обязательныйфайл.Makefile.inИспользуется для создания makefile в директории языка.Обязательный файл.config-lang.inОбрабатывается скриптом configure.lang-specs.hСодержит информацию для программы gcc о новомкомпиляторе (расширения файлов, возможные параметры).Файлы настройки на этом закончились. Теперь осталась реализация самогоfront end.

Для построения минимального варианта понадобится реализацияследующих модулей, описанных в Таблице 5.Практикум «оптимизирующие компиляторы»Таблица 5ФайлНазначениеLex.lОписания токенов для лексического анализатора на входномязыке LEX.Parce.yОписание синтаксиса для YACC. Генерация деревавнутреннего представления и генерация RTL.Vmk.c, vmk.hСобственно реализация компилятора. Инициализации...

Атакже заглушки для функций, которые от нас требует gcc.Vmk1.cСюда по примеру treelang вынесены callback функцииинициализации компилятора, парсера, открытия/закрытияфайлов, декодирования параметров командной строки. Визвестном примере TOY было всё в одном файле, но мырешили его не загромождать.Язык.Разработанный front end воспринимает язык, который позволяет втекстовой формулировке записывать унарные, бинарные и тернарныематематические функции.Ограничения языка:• оперирует целыми числами;• четыре математических операции (плюс, минус, умножить, делить).Пример:binary function a isfirstly first argument plus second then mul ten;Что эквивалентно следующей программе на языке Си:a( int first, int second ){ return ( first + second ) * 10 ; }Исходные материалы.Наиболее подробно процесс создание Front end описан в документе GCCFront end HOWTO от Sreejith K MenonПрактикум «оптимизирующие компиляторы»Для очень старых версий GCC существовал Front end TOY, которыйфактически реализовывал нужную нам функциональностьВ коллекции GCC существует демонстрационный язык treelang – примертого, как нужно создавать front end-ы.

Но он гораздо крупнее TOY и необладает нужной прозрачностью для лабораторной работы.Реализация front end-a для языка, функциональность которого непревышает Си, сводится к вызовам нужных API функции работы с деревоми RTL. В том же случае, если Вы реализуете font end для более сложногоязыка, то Вам предстоит свести все дополнительные возможности кимеющимся примитивам.В нашем случае всё очень просто. Приведённые в приложении два файлаlex.l и parce.y полностью описывают язык.Практикум «оптимизирующие компиляторы»Генерация кодаПроцесс генерации кода для базового блока (ББ) состоит из трёх основныхэтапов:1.

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Нашёл ошибку?
Или хочешь предложить что-то улучшить на этой странице? Напиши об этом и получи бонус!
Бонус рассчитывается индивидуально в каждом случае и может быть в виде баллов или бесплатной услуги от студизбы.
Предложить исправление
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5140
Авторов
на СтудИзбе
441
Средний доход
с одного платного файла
Обучение Подробнее