- •Понятие о языках программирования
- •Транслятор, компилятор, интерпретатор
- •Виды трансляторов
- •Виды компиляторов
- •Виды компиляции
- •Структура компилятора
- •Генерация кода
- •Динамическая компиляция
- •Декомпиляция
- •Раздельная компиляция
- •Типы интерпретаторов
- •Алгоритм работы простого интерпретатора
- •Достоинства и недостатки интерпретаторов
Транслятор, компилятор, интерпретатор
Транслятор(англ. translator — переводчик) — это программа-переводчик. Она преобразует программу, написанную на одном из языков высокого уровня, в программу, состоящую из машинных команд. Транслятор обычно выполняет также диагностику ошибок, формирует словари идентификаторов, выдаёт для печати тексты программы и т. д. Язык, на котором представлена входная программа, называется исходным языком, а сама программа — исходным кодом. Выходной язык называется целевым языком или объектным кодом.
В общем случае понятие трансляции относится не только к языкам программирования, но и к другим языкам — как формальным компьютерным (вроде языков разметки типа HTML), так и естественным (русскому, английскому и т. п.).
Виды трансляторов
Диалоговый. Обеспечивает использование языка программирования в режиме разделения времени (англ.).
Синтаксически-ориентированный (синтаксически-управляемый). Получает на вход описание синтаксиса и семантики языка и текст на описанном языке, который и транслируется в соответствии с заданным описанием.
Однопроходной. Формирует объектный модуль за один последовательный просмотр исходной программы.
Многопроходной. Формирует объектный модуль за несколько просмотров исходной программы.
Оптимизирующий. Выполняет оптимизацию кода в создаваемом объектном модуле.
Тестовый. Набор макрокоманд языка ассемблера, позволяющих задавать различные отладочные процедуры в программах, составленных на языке ассемблера.
Обратный. Для программы в машинном коде выдаёт эквивалентную программу на каком-либо языке программирования (см.: дизассемблер, декомпилятор).
Трансляторы реализуются в виде компиляторов или интерпретаторов. С точки зрения выполнения работы компилятор и интерпретатор существенно различаются.
Компилятор(англ. compiler — составитель, собиратель) читает всю программу целиком, делает ее перевод и создает законченный вариант программы на машинном языке, который затем и выполняется. Входной информацией для компилятора (исходный код) является описание алгоритма или программа на проблемно-ориентированном языке, а на выходе компилятора — эквивалентное описание алгоритма на машинно-ориентированном языке (объектный код).
Виды компиляторов
Векторизующий. Транслирует исходный код в машинный код компьютеров, оснащённых векторным процессором.
Гибкий. Сконструирован по модульному принципу, управляется таблицами и запрограммирован на языке высокого уровня или реализован с помощью компилятора компиляторов.
Диалоговый. См.: диалоговый транслятор.
Инкрементальный. Повторно транслирует фрагменты программы и дополнения к ней без перекомпиляции всей программы.
Интерпретирующий (пошаговый). Последовательно выполняет независимую компиляцию каждого отдельного оператора (команды) исходной программы.
Компилятор компиляторов. Транслятор, воспринимающий формальное описание языка программирования и генерирующий компилятор для этого языка.
Отладочный. Устраняет отдельные виды синтаксических ошибок.
Резидентный. Постоянно находится в оперативной памяти и доступен для повторного использования многими задачами.
Самокомпилируемый. Написан на том же языке, с которого осуществляется трансляция.
Универсальный. Основан на формальном описании синтаксиса и семантики входного языка. Составными частями такого компилятора являются: ядро, синтаксический и семантический загрузчики.