
- •1. Трансляторы, компиляторы, интерпретаторы.
- •2 . Ассемблер
- •3. Лексический анализ.
- •4. Синтаксический анализ.
- •6. Подготовка к генерации кода. Распределение памяти. Виды переменных и областей памяти. Выравнивание границ. Менеджеры памяти. Статическое и динамическое связывание.
- •7. Системы программирования. Интегрированные среды разработки. Структура современной системы программирования. Текстовые редакторы Лексический анализ «на лету».
- •8. Система подсказок и справок. Компоновщики. Загрузчики. Трансляция адресов. Настраивающий загрузчик. Динамические загрузчики.
- •9. Отладчики. Функции отладчиков. Библиотеки подпрограмм. Статические и динамические библиотеки подпрограмм. Ресурсы пользовательского интерфейса.
Системное программное обеспечение
1. Трансляторы, компиляторы, интерпретаторы.
Трансляторы, компиляторы, интерпретаторы. Этапы и фазы трансляции. Схема работы транслятора.
Трансляторы - программа или устройство, переводящее входную строку из одного языка в другой без потери списка.
aA bB
Интерпретаторы – перевод из одного языка в другой по шагам( это транслятор, который обычно совмещает процесс перевода и выполнения программы компилятор сначала переводит программу, а только затем ее можно выполнить).
Компиляторы - переводит целиком( это транслятор, переводящий текст программы в машинный код).
Этапы трансляции. Общая схема работы транслятора
Н
а
рисунке ниже представлена общая схема
работы компилятора. Из нее видно, что в
целом процесс компиляции состоит из
двух основных этапов синтеза и анализа.
На этапе анализа выполняется распознавание текста исходной программы, создание и заполнение таблиц идентификаторов. Результатом его работы служит некое внутреннее представление программы, понятное компилятору. На этапе синтеза на основании внутреннего представления программы и информации, содержащейся в таблице (таблицах) идентификаторов, порождается текст результирующей программы. Результат этого этапа – объектный код.
Кроме того, в составе компилятора присутствует часть, ответственная за анализ и исправление ошибок, которая при наличии ошибки в тексте исходной
программы должна максимально полно информировать пользователя о типе
ошибки и месте ее возникновения. В лучшем случае компилятор может предложить пользователю вариант исправления ошибки. Эти этапы, в свою очередь, состоят из более мелких этапов, называемых фазами компиляции. Состав фаз компиляции приведен в самом общем виде, их конкретная реализация и процесс взаимодействия могут различаться в зависимости от версии компилятора. Однако в том или ином виде все представленные фазы практически всегда присутствуют в компиляторах.
Рассмотрим основные фазы (части) компиляции:
Лексический анализ (сканер) – это часть компилятора, которая читает литеры программы на исходном языке и строит из них слова (лексемы) исходного
языка. На вход лексического анализатора поступает текст исходной программы, а выходная информация передается для дальнейшей обработки компилятором на этапе синтаксического разбора. С теоретической точки зрения лексический анализатор не является обязательной, необходимой частью компилятора. Однако существует причины, которые определяют его присутствие практически во всех компиляторах.
Синтаксический разбор – это основная часть компилятора на этапе
анализа. Она выполняет выделение синтаксических конструкций в тексте исходной программы, обработанном лексическим анализатором. На этой же фазе
компиляции проверяется синтаксическая правильность программы. Синтаксический разбор играет главную роль – роль распознавателя текста входного языка программирования.
Семантический анализ – это часть компилятора, проверяющая правильность текста исходной программы с точки зрения семантики входного языка.
Кроме непосредственно проверки, семантический анализ должен выполнять
преобразования текста, требуемые семантикой входного языка (такие, как добавление функций неявного преобразования типов). В различных реализациях
компиляторов семантический анализ может частично входить в фазу синтаксического разбора, частично – в фазу подготовки к генерации кода.
Подготовка к генерации кода – это фаза, на которой компилятором выполняются предварительные действия, непосредственно связанные с синтезом тек-
ста результирующей программы, но еще не ведущие к порождению текста на
выходном языке. Обычно сюда входят действия, связанные с идентификацией
элементов языка, распределением памяти и т. п.
Генерация кода – это фаза, непосредственно связанная с порождением команд, составляющих предложения выходного языка и в целом текст результирующей программы. Это основная фаза на этапе синтеза результирующей программы. Кроме непосредственного порождения текста результирующей программы, генерация обычно включает в себя также оптимизацию – процесс, связанный с обработкой уже порожденного текста. Иногда оптимизацию выделяют
в отдельную фазу компиляции, так как она оказывает существенное влияние на
качество и эффективность результирующей программы.
Таблицы идентификаторов (иногда «таблицы символов») – это специальным образом организованные наборы данных, служащие для хранения информации об элементах исходной программы, которые затем используются для по рождения текста результирующей программы. Элементами исходной программы, информацию о которых нужно хранить в процессе компиляции, являются переменные, константы, функции и т. п. – конкретный состав набора элементов зависит от используемого входного языка программирования. Понятие «таблицы» вовсе не предполагает, что это хранилище данных должно быть организовано именно в виде таблиц или других массивов информации.