Компилятор является большой по размеру программой. Состав компилятора делят на разные фазы, на которых производится одно представление программы в другое Взаимодействие процессов показано на рисунке. Фазы лексического и синтаксического (ЛА) и (СА) анализа разлагают программу на части. Генерация промежуточного кода (ГПК), опт-имизации (ОП} и генерация кода (ГК) объединяют ее в объектную программу. Табли-цы управления (КТ) и обработка ошибок (ОП) производятся на всех фазах компиляции.
Лексический анализ объединяет литеры в лексемы - служебные слова, идентификаторы, знаки операций и пунктуации. Лексемы можно закодировать целыми числами, например, do-1, ‘+’-2, идентификатор -3, константа -4. Для кода лексем идентификаторов и констант придается еще одна величина – вид или значение лексемы.
Синтаксический анализ группирует лексемы в синтаксические структуры, которые могут быть составлены из других синтаксических структур, например, А+ В могут входить в оператор или выражение. Как рекурсивные структуры данных они представляются (явно или неявно) в форме дерева с лексемами в листьях и со значениями синтаксических конструкций во внутренних узлах. Кроны поддеревьев представляет части программы соответствующей синтаксической конструкции. Генерация промежуточного кода создает последовательность простейших инструкций (команд), состоящих из кода операции и нескольких операндов. Эти инструкции отличаются от команд ассемблера тем, что в них не указываются конкретные регистры компьютера, необходимые для выполнения. Необязательная оптимизация кода предназначенпа для создания промежуточного кода, при котором объектная программа будет самой эффективной по времени исполнения и по расходу памяти. На фазе ГК объединяются объектные коды. При этом решаются такие задачи: размещение данных в памяти, выбор кода доступа к ним и выбор регистров для вычислений. Таблицы управления решают задачу хранения имен, используемых в программе, информации о них ( например, типов данных) и доступа к этой информации. Наиболее важны таблица символов и стуктура данных. Обработка ошибок производится каждый раз, когда обнаруживается ошибка в программе. Она предполпгает сообщение об ошибке и ее нейтрализацию, т.е. напрваление информации для передачи прошедшей фазы, чтобы оставшаяся часть могла быть выполнена. Основная задача - за один проход компилятора выявить максимум ошибок.