Компилятор


В вычислительной технике компилятор это компьютерная программа , которая переводит компьютерный код, написанный на одном языке программирования ( исходном языке), на другой язык ( целевой язык). Название «компилятор» в основном используется для программ, которые переводят исходный код с языка программирования высокого уровня на язык более низкого уровня (например , язык ассемблера , объектный код или машинный код ) для создания исполняемой программы. [1] [2] : п1 

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

Связанное программное обеспечение включает в себя программу, которая переводит с языка низкого уровня на язык более высокого уровня, который является декомпилятором  ; программа, осуществляющая перевод между языками высокого уровня, обычно называемая компилятором или транспилером . Переписчик языка обычно представляет собой программу, которая переводит форму выражений без изменения языка. Компилятор -компилятор — это компилятор, который создает компилятор (или его часть), часто общим и многоразовым способом, чтобы иметь возможность создавать множество разных компиляторов.

Компилятор, вероятно, выполняет некоторые или все из следующих операций, часто называемых фазами: предварительная обработка , лексический анализ , синтаксический анализ , семантический анализ ( синтаксис-управляемый перевод ), преобразование входных программ в промежуточное представление , оптимизация кода и генерация кода . Компиляторы обычно реализуют эти этапы как модульные компоненты, способствуя эффективному проектированию и правильности преобразований .исходного входа к целевому выходу. Ошибки программы, вызванные неправильным поведением компилятора, бывает очень трудно отследить и обойти; поэтому разработчики компилятора прилагают значительные усилия для обеспечения корректности компилятора . [3]

Компиляторы — не единственный языковой процессор, используемый для преобразования исходных программ. Интерпретатор — это компьютерная программа, которая преобразует, а затем выполняет указанные операции. [2] : p2  Процесс перевода влияет на разработку компьютерных языков, что приводит к предпочтению компиляции или интерпретации. Теоретически язык программирования может иметь как компилятор, так и интерпретатор. На практике языки программирования, как правило, связаны только с одним (компилятором или интерпретатором).

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


Схема работы типичного многоязычного многоцелевого компилятора
Дизайн компилятора
Пример лексера и парсера для C . Начиная с последовательности символов " if(net>0.0)total+=net*(1.0+tax/100.0);", сканер составляет последовательность токенов и классифицирует каждый из них, например, как идентификатор , зарезервированное слово , числовой литерал или оператор . Последняя последовательность преобразуется синтаксическим анализатором в синтаксическое дерево , которое затем обрабатывается оставшимися фазами компиляции. Сканер и синтаксический анализатор обрабатывают обычные и правильно контекстно-независимые части грамматики для C соответственно.