понедельник, 2 августа 2010 г.

Структура компилятора


Пока что мы рассматривали компилятор как "черный ящик", отображающий исходную программу в семантически эквивалентную ей целевую программу. Если мы немного приоткроем этот ящик, то увидим, что это отображение разделяется на две части: анализ и синтез.
Анализ разбивает исходную программу на составные части и накладывает на них грамматическую структуру. Затем он использует эту структуру для создания промежуточного представления исходной программы. Если анализ обнаруживает, что исходная программа неверно составлена синтаксически либо дефектна семан­тически, он должен выдать информативные сообщения об этом, чтобы пользова­тель мог исправить обнаруженные ошибки. Анализ также собирает информацию об исходной программе и сохраняет ее в структуре данных, именуемой таблицей символов, которая передается вместе с промежуточным представлением синтезу.
Синтез строит требуемую целевую программу на основе промежуточного представления и информации из таблицы символов. Анализ часто называют на­чальной стадией, а синтез заключительной.