Проблема трансляции программы с языка высокого уровня на машинный язык. Интерпретация и компиляция

 

Трансля́тор — программа или техническое средство, выполняющее трансляцию программы.

Транслятор обычно выполняет также диагностику ошибок, формирует словари идентификаторов, выдаёт для печати тексты программы и т. д.

Трансляция программы — преобразование программы, представленной на одном из языков программирования, в программу на другом языке и, в определённом смысле, равносильную первой.

Язык, на котором представлена входная программа, называется исходным языком, а сама программа — исходным кодом. Выходной язык называется целевым языком или объектным кодом.

Цель трансляции— преобразовать текст с одного языка на другой, который понятен адресату текста. В случае программ-трансляторов, адресатом является техническое устройство (процессор) или программа-интерпретатор.

Проблема трансляции состоит в том, что нужны простые и эффективные правила, по которым программа на алгоритмическом языке может быть преобразована в машинные команды.

03 A B C умножение

04 A B C деление

07 000 B 000 извлечение корня

10 A 000 C ввод данных

20 A 000 C вывод данных

77 000 000 000 конец программы

Преимущество алгоритмических языков здесь очевидно – легко понять, что вычисляется.

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

MOV DX, A

ADD B

MOV D, 4.4

MUL D

Писать программы на мнемокоде существенно легче и быстрее, чем в машинных командах. Но при этом необходим Ассемблер – программу, переводящую программы из мнемокода в машинные коды.

Очевидно, что одновременно с разработкой языка программирования высокого уровня пишется транслятор.

Компиля́тор— программа, предназначенная для трансляции высокоуровневого языка в абсолютный код или, в язык ассемблера. Входной информацией для компилятора (исходный код) является описание алгоритма или программа на проблемно-ориентированном языке, а на выходе компилятора — эквивалентное описание алгоритма на машинно-ориентированном языке(объектный код).

Компиляция – трансляция программы на язык, близкий к машинному, и последующая её компоновка.

Процесс компиляции как правило состоит из нескольких этапов: лексического, синтаксического и семантического анализов (англ. Semantic analysis), генерации промежуточного кода, оптимизации и генерации результирующего машинного кода.

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

Другой метод реализации — когда программа исполняется с помощью интерпретатора вообще без трансляции.

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

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

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

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