- •Машино- зависимая оптимизация кода.
- •Критерии производительности компиляторов.
- •Метод рекурсивного спуска.
- •1.Лексический анализ: задачи, роль, особенности, проблемы.
- •Машинно- независимая оптимизация кода.
- •Синтаксический анализ: задачи, виды, преимущества использования грамматик.
- •Машино- зависимая оптимизация кода.
- •Метод рекурсивного спуска.
- •Машино- зависимая оптимизация кода.
- •Ll(1) грамматики. Проверка свойств ll(1). Переходов.
- •Критерии производительности компиляторов.
- •Преобразование грамматик к ll(1) виду.
- •Организация памяти: «куча».
- •Алгоритм ll(1) разбора.
- •Критерии производительности компиляторов.
- •Языки промежуточных представлений кода.
- •Сравнение java и .Net.
Критерии производительности компиляторов.
Критерии производительности Имеется ряд аспектов производительности компилятора. Достаточно сложно найти компромисс среди всех этих критериев, а кроме того, ряд параметров может остаться не определенным спецификацией компилятора. Например, что важнее — скорость работы компилятора или скорость работы генерируемого им кода. Однако такой подход может не привести к компилятору, который генерирует высококачественный целевой код и имеет простую поддержку. Есть два аспекта переносимости компилятора. Переносимый компилятор может оказаться не настолько эффективен, как компилятор, разрабатываемый для определенной машины, поскольку последний может использовать информацию о целевой машине, которую не может использовать переносимый компилятор.
Компилятор — достаточно сложная программа, которую желательно писать на языке более дружественном, чем ассемблер. Использование возможностей языка для компиляции его самого является сущностью раскрутки . Здесь мы рассмотрим использование раскрутки для создания компиляторов и перенесения их с одной машины на другую путем изменения заключительной стадии компиляции. Основные идеи раскрутки известны со средины . Раскрутка может привести к вопросу о том, как был скомпилирован первый компилятор . Для ответа мы рассмотрим, каким образом
ПОДХОДЫ К РАЗРАБОТКЕ КОМПИЛЯТОРА.
Старый компилятор генерировал недостаточно эффективный код. Среда разработки компилятора По существу, компилятор является просто программой. Среда, в которой эта программа разрабатывается, может повлиять на скорость и надежность реализации компилятора. Не менее важен и язык разработки компилятора. Хотя имеются компиляторы, написанные на языках типа . Если исходный язык представляет собой новый системно. С использованием рассмотренной в предыдущем разделе технологии, компилирование компилятора облегчает его отладку. Существенно облегчить создание эффективного компилятора может инструментарий разработки программного обеспечения, имеющийся в используемой среде программирования. При написании компилятора обычным является разделение всей программы на модули, где каждый модуль может обрабатываться своим способом. Программа, управляющая обработкой таких модулей, — незаменимый помощник создателя компилятора. Чтобы показать, как задача сборки компилятора может быть выполнена с помощью . Двоеточие во второй строке говорит о том, что файл . За такой строкой зависимости могут следовать команды для . Транслятор создается посредством ввода команды . После создания компилятора профайлер может использоваться для определения того, какое время затрачивается при компиляции на решение различных задач. В дополнение к общим инструментам для разработки программного обеспечения, при разработке компиляторов используются специализированные инструменты. В дополнение к генераторам лексических и синтаксических анализаторов, созданы генераторы атрибутных грамматик и генераторов кода, облегчающие создание соответствующих компонентов компилятора. Многие из этих инструментов обеспечивают поиск ошибок в спецификациях компиляторов. По поводу эффективности и удобства генераторов программ при построении компиляторов велись определенные споры . Однако нельзя отрицать тот факт, что хорошо реализованный генератор может оказать неоценимую помощь при разработке надежных . СРЕДА РАЗРАБОТКИ КОМПИЛЯТОРА . Корректный синтаксический анализатор гораздо проще получить при использовании грамматического описания языка и генератора анализаторов, чем при кодировании его вручную. Важным вопросом, однако, является то, насколько корректно эти генераторы работают в связке друг с другом и с другими программами.