КОМПИЛЯТОРЫ Миронов Евгений Сергеевич
Компиляторы Компилятор (транслятор) Интерпретатор JIT
Компилятор (транслятор)
Интерпретаторы
Гибридный компилятор (JIT)
Выполнение исходной программы Исходная программа Препроцессор Компилятор Ассемблер Компоновщик/загрузчик Целевой машинный код
Компоновщик/загрузчик Компоновщик ( «Линкер» , «Линковщик» ) – обеспечивает обращение кода из одного файла к коду из другого файла Загрузчик – помещает все выполнимые объектные файлы в память для выполнения
Компиляторы (фазы компиляции)
Компилятор (фазы компиляции) Лексический анализатор Синтаксический анализатор Семантический анализатор Генератор промежуточного кода Машинно-независимый оптимизатор кода Генератор кода Машинно-зависимый оптимизатор кода
Лексический анализатор Поток символов группируется в значащие последовательности (лексемы) Для каждой лексемы анализатор строит токен: ◦ (имя_токена, значение_атрибута)
Синтаксический анализ или разбор (parsing) Строится древовидное представление программы Построение дерева основано на грамматике языка
Семантический анализ Проверка исходной программы на семантическую согласованность языка Проверка типов
Оставшиеся фазы Генерация промежуточного кода Оптимизация кода (машиннонезависимая) Генерация кода Оптимизация кода (машиннозависимая)
Таблица символов Имя и его атрибуты Атрибуты ◦ Количество памяти ◦ Тип ◦ Область видимости