Завершающий этап создания программы заключается в переводе алгоритма, написанного на одном из языков программирования (С/С++, Паскаль и др.), на низкоуровневый машинный язык. Это связано с тем, что вычислительным машинам для выполнения какой-либо задачи необходимо задавать команды на понятном им языке, приближенном к бинарному и оперирующем примитивными структурами данных (бит, байт или слово). Процесс перевода проблемно-ориентированных операторов языков высокого уровня в двоичный код называется трансляцией. Существует два метода трансляции – компиляция и интерпретация.
Компилятор - что это такое?
Анализ множества толкований терминов «компилятор» и «компиляция» позволяет выделить следующее определение. Компилятор – это программа, предназначенная для перевода текста исходного алгоритма с языка высокого уровня в эквивалентный набор команд на машинно-ориентированном языке. Это так называемый объектный код, для последующей компоновки полученного объектного кода в готовый к использованию программный модуль.
Компилятор и интерпретатор – сходство и отличия
Интерпретатор – это утилита, так же как и компилятор, предназначенная для перевода исходного программного кода в машинный. Однако, в отличие от компилятора, интерпретатор запускается каждый раз вместе с программой и выполняет перевод построчно.
Можно сказать, что компилятор и интерпретатор – это языковые процессоры, позволяющие вычислительной машине распознавать и выполнять команды, заданные программистом.
Классификация компиляторов
Классифицируют компиляторы в основном по особенностям, связанным с областями их практического применения.
Векторизующий компилятор – это утилита, выполняющая трансляцию исходного кода в объектный и адаптированная под вычислительные машины, оснащенные векторными процессорами.
Гибкий компилятор запрограммирован на языке высокого уровня по модульному принципу. Его управление осуществляется с помощью таблиц. Возможно также его исполнение с помощью компилятора компиляторов.
Инкрементальный компилятор – это языковой процессор, осуществляющий повторное транслирование отдельных фрагментов исходного кода и дополнений к нему. Однако он исключает при этом перекомпиляцию всего приложения.
Интерпретирующий (пошаговый) компилятор – это утилита, последовательно выполняющая независимую компиляцию каждого оператора или команды исходного высокоуровневого кода.
Компилятор компиляторов – транслятор, способный воспринимать формальное описание для языка программирования и самостоятельно генерировать компилятор для любого языка.
Отладочный компилятор позволяет найти и устранить некоторые виды синтаксических ошибок, допущенных при написании исходного кода
Резидентный компилятор занимает постоянное место в оперативной памяти и, следовательно, является доступным для повторного использования широким рядом задач.
Самокомпилируемый компилятор написан на том же языке, с которого выполняется трансляция.
Универсальный компилятор базируется на формальном описании семантических и синтаксических параметров входного языка. Основными компонентами подобной утилиты являются ядро, синтаксический и семантический загрузчики.
Устройство компилятора
В основе любого компилятора лежат транслятор и компоновщик. Зачастую при компиляции используется внешний компоновщик, а сам компилятор выполняет лишь функцию трансляции. Случается также, что компилятор реализуется как своеобразная программа-менеджер, связанная с транслятором (или трансляторами, если при написании исходного кода использовались разные языки программирования) и компоновщиком и запускающая их исполнение при необходимости.
Языки программирования и методы трансляции
Несмотря на то, что программу, написанную на любом языке программирования, можно как компилировать, так и интерпретировать, многие высокоуровневые языки имеют предрасположенность к тому или иному методу трансляции. Так, язык С изначально рассчитан на компиляцию, а Java – на интерпретацию написанной программы. Разрабатываются компиляторы языка С довольно легко, благодаря его относительно невысокому уровню и небольшому ряду структурных элементов.
Достоинства и недостатки компиляторов и интерпретаторов. Области применения
Отметим, что скомпилированные приложения обладают большим быстродействием по сравнению с интерпретируемыми, но в то же время полученный в результате компиляции машинный код зависит от аппаратной платформы. Так, программа, написанная и скомпилированная для Windows, не будет работать, например, в Linux. Поэтому в случае интернет-приложений, когда нельзя сказать заранее, в какой среде они будут работать, используют интерпретацию или байт-код (в этом случае исходную программу преобразуют в промежуточный вид, который можно выполнить на различных аппаратных платформах).