- •Гуманитарная Академия Дистанционное образование
- •Оглавление
- •Дидактический план
- •Литература
- •Перечень компетенций
- •Тематический обзор
- •1 Понятие системы программирования
- •1.1 Классификация систем программирования
- •1.2 Средства автоматизированной разработки программ
- •1.3 Пакеты прикладных программ
- •1.4 Объектно-ориентированные системы программирования
- •2 Основные концепции трансляторов
- •2.1 Введение в методы трансляции
- •2.2 Разновидности языкового процессора
- •2.3 Компиляторы как класс программного обеспечения
- •2.4 Среда разработки компилятора
- •2.5 Упрощенная модель компилятора
- •2.6 Лексический анализ
- •2.7 Синтаксический анализ
- •2.8 Семантический анализ
- •2.9 Конечный автомат
- •2.10 Контексно-свободная грамматика
- •2.11 Атрибутные транслирующие грамматики
- •2.12 Генерация кода
- •2.13 Распределение памяти
- •3 Редактор связей
- •3.1 Управляющий язык редактора связей
- •3.2 Предложения определения секций
- •3.3 Спецификации файлов
- •3.4 Выходная секция
- •3.5 Создание и определение имен при редактировании связей
- •3.6 Размещение секций в именованных областях памяти
- •3.7 Инициализация пустот и секций .Bss
- •3.8 Определение точки входа
- •3.9 Библиотеки объектных файлов
- •3.10 Алгоритм размещения
- •3.11 Инкрементальное редактирование связей
- •3.12 Синтаксис управляющего языка редактора связей
- •4 Отладчик
- •4.1 Отладчик Turbo Debugger
- •4.2 Отладчик Турбо Паскаль
- •4.3 Отладка программ в системе Delphi 7
- •Задания для самостоятельной работы
- •Тренинг компетенций
- •Глоссарий
- •Системное программное обеспечение (курс 1) юнита 2
2.3 Компиляторы как класс программного обеспечения
Принципы и технологии написания компиляторов очень разнообразны. Написание компиляторов охватывает языки программирования, архитектуру вычислительных систем, теорию языков, алгоритмы и технологию создания программного обеспечения.
Создатели компиляторов применяют такие программные инструменты, как отладчики, средства контроля версий, профайлеры.
Профайлер – программа определения профиля программы или профиля оборудования.
Профиль программы – информация о ходе выполнения программы.
Профиль оборудования – набор значений, параметров и характеристик конкретного оборудования компьютера.
Вскоре после написания первых компиляторов появились инструменты, облегчающие их создание. Такие системы получили названия компиляторов компиляторов, генераторов компи-ляторов или систем написания трансляторов. Как правило, они ориентированы на языки опреде-ленной модели и наиболее подходят для генерации компиляторов языков именно этой модели.
Например, лексические анализаторы для всех языков одинаковы – за исключением множеств ключевых слов и знаков. Многие компиляторы компиляторов используют фиксированные программы лексического анализа в генерируемых компиляторах. Эти программы пользуются только списком ключевых слов, и все, что требуется от пользователя, – предоставить этот список. Такой подход вполне корректен, но может оказаться неработоспособным, если необходимо распознавание нестандартных токенов. Например, идентификаторов, которые включают символы, отличающиеся от букв и цифр.
Некоторые инструменты созданы для автоматической разработки определенных компонентов компиляторов. Они используют специализированные языки для определения и реализации компо-нентов и применяют весьма интеллектуальные алгоритмы. Наиболее эффективные инструменты скрывают детали алгоритма генерации и производят компоненты, интегрируемые с остальными частями компилятора.
Инструменты для создания компиляторов:
1) генераторы синтаксических анализаторов – производят синтаксические анализаторы по входной информации, основанной на контекстно-свободной грамматике. Генераторы синтак-сических анализаторов используют алгоритмы разбора, которые сложны для ручной реализации;
2) генераторы сканеров – этот инструментарий автоматически генерирует лексические ана-лизаторы с использованием спецификаций, построенных на регулярных выражениях. В основном, лексические анализаторы действуют по принципу конечного автомата;
3) средства синтаксически управляемой трансляции. С помощью данного инструментария создаются наборы программ прохода по дереву разбора и генерации промежуточного кода. Основная идея состоит в одной или нескольких "трансляциях", связанных с каждым узлом дерева разбора. При этом каждая трансляция определяется с учетом соседних узлов дерева;
4) автоматические генераторы кода – эти инструменты получают набор правил, которые указывают способ трансляции каждой операции промежуточного языка в определенный машинный язык. Правила должны быть достаточно детальны, чтобы обеспечить работу с различными способами доступа к данным. Например, переменные могут находиться в регистрах, статических ячейках памяти или в стеке.
Стек – упорядоченный набор элементов данных, в котором очередной читаемый или удаляемый элемент выбирается из его конца.
В данном случае применяется технология "согласованных шаблонов". Инструкции промежу-точного кода замещаются "шаблонами", которые представляют собой последовательности машин-ных инструкций, согласованные по способу хранения переменных. Поскольку обычно имеется множество вариантов размещения переменных, возможно использование различных способов замещения промежуточного кода набором шаблонов. Необходимо выбрать хорошее замещение шаблонами, без перебора всех возможных вариантов и замедления компиляции;
5) средства работы с потоком данных. Для получения оптимизированного выходного кода требуется проведение анализа потока данных, т.е. сбора и анализа информации о том, каким образом значения передаются из одной части программы в другую.