Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Билеты 38-20 СПО.docx
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
934 Кб
Скачать
☆

24. Фазы компиляции.

Процесс компиляции состоит из 2 осн. Этапов – анализа и синтеза.

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

На этапе синтеза на основании внутреннего представления программы и информации, содержащейся в ТИ, порождается текст результирующей программы. Результатом этого этапа является объектный код.

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

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

К в целом выполняет две основные функции.

Во-первых, он является распознавателем для языка исходной программы. То есть он должен получить на вход цепочку символов входного языка, проверить ее принадлежность языку и, более того, выявить правила, по которым эта цепочка была построена.

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

Основные фазы компиляции:

Лексический анализ(сканер) – это часть К, которая читает литеры программы на исходном языке и строит из них слова (лексемы) исходного языка. На вход ЛА поступает текст исходной программы, а выходная информация передается для дальнейшей обработки К на этапе синтаксического разбора. С теоретической т.з. ЛА не яв-ся обязательной, необходимой частью К.

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

Семантический анализ – это часть компилятора, проверяющая правильность текста исходной программы с т.з семантики входного языка. Кроме непосредственно проверки СА должен выполнять преобразования текста, требуемые семантикой входного языка (например, такие, как добавление функции неявного преобразования типов). В различных реализациях К СА м. частично входить в фазу СР, частично – в фазу подготовки к генерации кода.

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

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

ТИ – это специальным образом организованные наборы данных, служащие для хранения информации об элементах исходной программы, которые затем используются для порождения текста рез. программы.(м.б. как одна,так и неск.). Элементами исходной программы, информацию о которых необходмио хранить в процессе компиляции, яв-ся переменные, константы, функции и т.п.