Компилятоp (от англ. “compile” - собирать вместе, составлять) - системная программа, выполняющая преобразование программы, написанной на одном алгоритмическом языке, в программу на языке, близком к машинному, и в определённом смысле эквивалентную первой. Компиляторы пишутся как на автокоде, так и на языках высокого уровня. Кроме того, существуют и специальные языки конструирования компиляторов - компиляторы компиляторов.
Первые компиляторы появились в начале 1950-х гг. Сегодня сложно определить, когда появился первый компилятор, поскольку в те годы проводилось множество экспериментов и разработок различными независимыми группами. В основном, целью разработки первых компиляторов было преобразование в машинный код арифметических формул.
Большая часть компиляторов переводят программу с некоторого высокоуровневого языка программирования в машинный код, который может быть непосредственно выполнен центральным процессором. Как правило, этот код также должен выполняться в среде конкретной операционной системы, поскольку использует предоставляемые ей возможности (системные вызовы, библиотеки функций).
Процесс компиляции программ состоит из нескольких фаз. Их состав может несколько отличаться - некоторые из них могут быть разбиты на составляющие, другие, напротив, объединены в одну. В этом случае компиляторы, как правило, выполняют трансляцию текста исходной программы за несколько проходов.
Понятие прохода. Однопроходные и многопроходные компиляторы
Рис. 1 - Компилятор в языке программирования Pascal
Примеры компиляторов:
- GCC;
- Free Pascal Compiler;
- Компиляторы C, C++ и Fortran от Sun Microsystems Inc.;
- Watcom Fortran / C++ Compiler;
- Intel C++ / Fortran compiler;
- ICC AVR.
Некоторые компиляторы (например, Java) переводят программу не в машинный код, а в программу на некотором специально созданном низкоуровневом языке. Такой язык - байт-код - также можно считать языком машинных команд, поскольку он подлежит интерпретации виртуальной машиной. Например, для языка Java это JVM (язык виртуальной машины Java), или так называемый байт-код Java (вслед за ним все промежуточные низкоуровневые языки стали называть байт-кодами). Для языков программирования на платформе .NET Framework (C#, Managed C++, Visual Basic, .NET и другие) это MSIL (Microsoft Intermediate Language, "Промежуточный язык фирмы Майкрософт").