Компиляция является преобразованием исходного текста в некоторую другую форму или представление. Наиболее распространенное использование этого тега для вопросов относительно преобразования языка программирования в машинный код. Этот тег обычно используется с другим тегом, указывающим на тип исходного текста, такого как тег языка программирования (C, C++, Пойдите, и т.д.), и тег, указывающий на инструмент или компилятор, используемый для преобразования (gcc, Visual Studio, и т.д.).

Компиляция является преобразованием исходного текста в некоторую другую форму или представление. Используемый программный инструмент называют компилятором. Большинство компиляторов обрабатывает исходный текст для генерации своего рода машинного кода для целевой аппаратной машины. Некоторые компиляторы генерируют "машинный код" для целевой виртуальной машины (например, байт-код для виртуальной машины Java).

Во всех этих случаях компилятор создает новые файлы преобразованного исходного текста, и эти новые файлы используются в некоторой другой обработке, подходят и включая выполнение непосредственно на аппаратных средствах или виртуальном аппаратном обеспечении.

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

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

Компилятор C или C++ генерирует объектные файлы, содержащие двоичный код, которые затем обрабатываются компоновщиком в приложение и выполняются. Компилятор Java генерирует файлы класса, содержащие код байта виртуальной машины Java, которые затем объединены в JAVA-приложение и выполнены.

Механизмы для языков сценариев, таких как Php и JavaScript могут использовать внутренний компилятор для генерации промежуточной формы исходного текста, который затем выполняется внутренней виртуальной машиной. Для некоторых типов приложений промежуточная форма временно хранится или кэшируется так, чтобы, если тот же сценарий используется несколькими потоками или несколькими repetions в скором времени, охватили, издержки повторно сканирования исходного текста уменьшаются для повышения эффективности. Однако они не считаются компиляторами.

Компиляция обычно включает следующие шаги:

  • При сканировании - сканер ответственен за маркирование исходного кода в самые маленькие блоки информации (ключевые слова, операторы, скобки, переменные, литералы и т.д.).
  • При парсинге - синтаксический анализатор ответственен с созданием Абстрактного синтаксического дерева (AST), которое является древовидным представлением кода согласно определению исходного языка.
  • Оптимизация - AST, представляющий код, отправляется через различные оптимизаторы для оптимизации для скорости, или пространство (эта часть является дополнительной).
  • Генерация кода - генератор кода создает линейный переведенный документ из AST и определение выходного языка.

На многих языках и компиляторах там дополнительные шаги, добавленные к процессу (как предварительная обработка), но это язык и конкретный компилятор.

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

Вопросы с помощью этого тега должны быть о процессе компиляции, не о том, как записать, компиляторы, например (используйте тег компилятора для этого).