Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СПО юнита 2.doc
Скачиваний:
38
Добавлен:
17.11.2019
Размер:
5.82 Mб
Скачать

2.4 Среда разработки компилятора

По существу, компилятор является просто программой. Среда, в которой эта программа разрабатывается, может повлиять на скорость и надежность реализации компилятора. Не менее важен и язык разработки компилятора. Наиболее логичным выбором для большинства разработчиков компиляторов будут системно-ориентированные языки.

Если исходный язык представляет собой новый системно-ориентированный язык, то имеет смысл разрабатывать компилятор на нем самом.

Облегчить создание эффективного компилятора может инструментарий разработки програм-много обеспечения, имеющийся в используемой среде программирования. При написании компи-лятора обычным является разделение всей программы на модули, где каждый модуль может обра-батываться своим способом. Например, UNIX содержит утилиту make, которая облегчает управле-ние и обслуживание модулей, составляющих компьютерную программу. Make отслеживает связи между модулями программы и выполняет только те команды, которые необходимы после внесения изменений в модули.

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

Еще одним полезным инструментом при разработке компиляторов является профайлер. После создания компилятора профайлер может использоваться для определения того, какое время затрачивается при компиляции на решение различных задач. Определение "горячих точек" компилятора и их изменение могут ускорить работу компилятора в два-три раза.

В дополнение к общим инструментам для разработки программного обеспечения при разработке компиляторов используются специализированные инструменты. Например, генератор Lex может быть использован для автоматизации создания лексических анализаторов по их спецификациям в виде регулярных выражений или генератор Yacc, который позволяет автоматически создавать LR-анализаторы по грамматическому описанию синтаксиса языка. Рассмотренная выше команда make при необходимости автоматически вызывает Lex и Yacc. Кроме генераторов лексических и синтаксических анализаторов, созданы генераторы атрибутных грамматик и генераторов кода, облегчающие создание соответствующих компонентов компилятора. Эти инструменты обеспечивают поиск ошибок в спецификациях компиляторов.

Корректный синтаксический анализатор проще получить при использовании грамматического описания языка и генератора анализаторов, чем при кодировании его вручную. Важный вопрос – насколько корректно эти генераторы работают в связке друг с другом и с другими программами. Обычная ошибка при разработке генераторов состоит в предположении о том, что это и есть центральная задача всего построения компиляторов. Однако намного лучшие результаты приносит конструкция, в которой генератор производит подпрограммы, которые могут вызываться другими программами.

Современные компиляторы – не отдельные, автономные инструментальные средства, а часть интегрированных сред разработки IDE (Integrated Development Environment), называемые средами программирования. Помимо предоставления средства компиляции, современная среда IDE предлагает средства языково-ориентированного редактирования, отладки, определения рабочих профилей программы, управления конфигурацией. Например, Borland IDE для языков C/C++ в среде Windows предлагает средства для выполнения операций:

– редактирование со средствами вырезания, вставки, отмены операции;

– поиск со средствами поиска текста, замены текста и локализации функций в процессе отладки;

– обзор различных окон, содержащих средства диагностики и другую информацию, связан-ную с текущим проектом, включая информацию по иерархии вызовов, расположению точек прерывания программы, содержимого регистров, расположению переменных, использованию классов;

– управление проектом, включая запуск новых проектов, компиляцию и связывание раз-личных компонентов проекта при раздельном контроле средств компиляции и сборочных файлов;

– отладку для возможности запуска программы в обычном режиме или режиме отладки со средствами пошагового выполнения, установки точек прерывания, отслеживания значений выражений, просмотра таблиц символов;

– средства выполнения, связанные с IDE.