Компилятор
-
Основы компилятора
- Компилятор преобразует исходный код в машинный код.
- Компиляторы могут быть интерпретируемыми или компилируемыми.
- Компиляторы делятся на статические и динамические.
-
Разработка компилятора
- Разработка компилятора включает в себя дизайн, интерфейс, среднюю часть и заднюю часть.
- Дизайн определяет комплексное решение или взаимодействие с другими инструментами.
- Требования к дизайну включают строго определенные интерфейсы.
- Разработка может быть разделена на этапы для улучшения дизайна.
-
Однопроходные и многопроходные компиляторы
- Однопроходные компиляторы выполняют компиляцию за один проход, что упрощает разработку.
- Многопроходные компиляторы разбивают компиляцию на несколько этапов для оптимизации.
-
Трехэтапная структура компилятора
- Интерфейс сканирует и анализирует исходный код, создавая промежуточное представление.
- Промежуточная часть выполняет оптимизацию, независимую от целевой архитектуры.
- Задняя часть генерирует ассемблерный код и выполняет планирование команд.
-
Внешний интерфейс
- Интерфейс анализирует исходный код и управляет таблицей символов.
- Традиционно интерфейс разделяется на лексический, синтаксический и семантический анализ.
- Лексический и синтаксический анализ могут быть автоматизированы или выполняться вручную.
-
Дополнительные этапы разработки интерфейса
- Реконструкция строки преобразует исходный код в каноническую форму.
- Предварительная обработка поддерживает макроподстановки и условную компиляцию.
- Пересказана только часть статьи. Для продолжения перейдите к чтению оригинала.