Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Фазы компилятора

Читайте также:
  1. Контекст компилятора

Концептуально компилятор работает пофазно, причем в процессе каждой фазы про­исходит преобразование исходной программы из одного представления в другое. Типич­ное разбиение компилятора на фазы показано на рис. 1.9. На практике некоторые фазы могут быть сгруппированы вместе, как упоминается в разделе 1.5, и промежуточные представления программы внутри таких групп могут явно не строиться.

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

Управление таблицей символов

Одной из важных функций компилятора является запись используемых в исходной программе идентификаторов и сбор информации о различных атрибутах каждого иден­тификатора. Эти атрибуты предоставляют сведения об отведенной идентификатору па­мяти, его типе, области видимости (где в программе он может применяться). При ис­пользовании имен процедур атрибуты говорят о количестве и типе их аргументов, мето­де передачи каждого аргумента (например, по ссылке) и типе возвращаемого значения, если таковое имеется.

Таблица символов представляет собой структуру данных, содержащую записи о каж­дом идентификаторе с полями для его атрибутов. Данная структура позволяет быстро найти информацию о любом идентификаторе и внести необходимые изменения. Табли­цы символов подробнее рассматриваются в главах 2, "Простой однопроходный компилятор", и 7, "Среды времени исполнения".

Исходная программа
Диспетчер таблицы символов
Лексический анализ
Синтаксический анализ
Семантический анализ
Генератор промежуточного кода
Оптимизатор кода
Генератор кода
Обработчик ошибок
Целевая программа

 


Рис. 1.9. Фазы компилятора

 

Если лексическим анализатором в исходной программе обнаружен идентификатор, он записывается в таблицу символов. Однако атрибуты идентификатора обычно не могут быть определены в процессе лексического анализа. Например, в объявлении переменных на языке Pascal

var position, initial, rate: real;

когда лексический анализатор находит идентификаторы position, initial и rate, их тип real еще неизвестен.

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

 


Дата добавления: 2015-11-30; просмотров: 22 | Нарушение авторских прав



mybiblioteka.su - 2015-2024 год. (0.008 сек.)