Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоргалка / спо / СПО 3.doc
Скачиваний:
7
Добавлен:
26.01.2019
Размер:
271.87 Кб
Скачать
  1. Этапы компиляции. Общая схема работы компилятора.

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

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

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

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

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

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

  1. ФАЗА АНАЛИЗА

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

Лексический анализ не является обязательным, однако существуют причины по которым он присутствует практически во всех К.

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

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

  1. ФАЗА СИНТЕЗА

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

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

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

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

Деление процесса К. на фазы на практике может не соблюдаться столь строго.

Соседние файлы в папке спо