![](/user_photo/2706_HbeT2.jpg)
- •Гуманитарная Академия Дистанционное образование
- •Оглавление
- •Дидактический план
- •Литература
- •Перечень компетенций
- •Тематический обзор
- •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.4 Среда разработки компилятора
По существу, компилятор является просто программой. Среда, в которой эта программа разрабатывается, может повлиять на скорость и надежность реализации компилятора. Не менее важен и язык разработки компилятора. Наиболее логичным выбором для большинства разработчиков компиляторов будут системно-ориентированные языки.
Если исходный язык представляет собой новый системно-ориентированный язык, то имеет смысл разрабатывать компилятор на нем самом.
Облегчить создание эффективного компилятора может инструментарий разработки програм-много обеспечения, имеющийся в используемой среде программирования. При написании компи-лятора обычным является разделение всей программы на модули, где каждый модуль может обра-батываться своим способом. Например, UNIX содержит утилиту make, которая облегчает управле-ние и обслуживание модулей, составляющих компьютерную программу. Make отслеживает связи между модулями программы и выполняет только те команды, которые необходимы после внесения изменений в модули.
Впоследствии компиляция будет выполняться только для файла, в который были внесены изменения со времени последней компиляции, и зависящих от него файлов.
Еще одним полезным инструментом при разработке компиляторов является профайлер. После создания компилятора профайлер может использоваться для определения того, какое время затрачивается при компиляции на решение различных задач. Определение "горячих точек" компилятора и их изменение могут ускорить работу компилятора в два-три раза.
В дополнение к общим инструментам для разработки программного обеспечения при разработке компиляторов используются специализированные инструменты. Например, генератор Lex может быть использован для автоматизации создания лексических анализаторов по их спецификациям в виде регулярных выражений или генератор Yacc, который позволяет автоматически создавать LR-анализаторы по грамматическому описанию синтаксиса языка. Рассмотренная выше команда make при необходимости автоматически вызывает Lex и Yacc. Кроме генераторов лексических и синтаксических анализаторов, созданы генераторы атрибутных грамматик и генераторов кода, облегчающие создание соответствующих компонентов компилятора. Эти инструменты обеспечивают поиск ошибок в спецификациях компиляторов.
Корректный синтаксический анализатор проще получить при использовании грамматического описания языка и генератора анализаторов, чем при кодировании его вручную. Важный вопрос – насколько корректно эти генераторы работают в связке друг с другом и с другими программами. Обычная ошибка при разработке генераторов состоит в предположении о том, что это и есть центральная задача всего построения компиляторов. Однако намного лучшие результаты приносит конструкция, в которой генератор производит подпрограммы, которые могут вызываться другими программами.
Современные компиляторы – не отдельные, автономные инструментальные средства, а часть интегрированных сред разработки IDE (Integrated Development Environment), называемые средами программирования. Помимо предоставления средства компиляции, современная среда IDE предлагает средства языково-ориентированного редактирования, отладки, определения рабочих профилей программы, управления конфигурацией. Например, Borland IDE для языков C/C++ в среде Windows предлагает средства для выполнения операций:
– редактирование со средствами вырезания, вставки, отмены операции;
– поиск со средствами поиска текста, замены текста и локализации функций в процессе отладки;
– обзор различных окон, содержащих средства диагностики и другую информацию, связан-ную с текущим проектом, включая информацию по иерархии вызовов, расположению точек прерывания программы, содержимого регистров, расположению переменных, использованию классов;
– управление проектом, включая запуск новых проектов, компиляцию и связывание раз-личных компонентов проекта при раздельном контроле средств компиляции и сборочных файлов;
– отладку для возможности запуска программы в обычном режиме или режиме отладки со средствами пошагового выполнения, установки точек прерывания, отслеживания значений выражений, просмотра таблиц символов;
– средства выполнения, связанные с IDE.