поддержка
проекта:
разместите на своей странице нашу кнопку!И мы
разместим на нашей странице Вашу кнопку или ссылку. Заявку прислать на
e-mail
код нашей кнопки:
Транслятор
Для того чтобы программа, написанная на языке программирования, была
понята вычислительной машиной, ее необходимо перевести на язык команд
ЭВМ, или машинный язык. Такой перевод осуществляется автоматически
специальной программой, которая получила название "транслятор" (от
латинского слова translatio - "передача").
Трансляторы обычно подразделяют на три типа:
компиляторы, переводящие всю программу, написанную на языке
программирования высокого уровня, на машинный язык, после чего программа
записывается в память ЭВМ и лишь потом реализуется;
интерпретаторы, переводящие команды или операторы входной программы по
очереди и немедленно выполняющие их;
ассемблеры, переводящие входную программу, написанную на автокоде (языке
ассемблера), в систему команд машины. Ассемблер, как правило, каждый
оператор автокода отображает в одну команду ЭВМ. Исключение составляют
макрооператоры, каждый из которых отображается в последовательность
команд. Автокод используется системными программистами, для которых
важно получить экономные и эффективные машинные программы. Обычные
пользователи на автокоде не работают.
Любой транслятор решает две основные задачи:
1) анализирует транслируемую программу, в частности определяет,
правильна ли она;
2) генерирует выходную программу (ее часто называют объектной или
рабочей) на язык команд ЭВМ (в некоторых случаях транслятор генерирует
выходную программу на промежуточном языке, например на языке
ассемблера).
Транслятор должен, во-первых, для любого предъявленного текста на
входном языке уметь распознать, правилен он или нет. Если нет, то
транслятор обязан указать те места текста, где нарушены правила
написания. Если текст программы правильный, то транслятор должен уметь
определить ее структуру (например, выделить арифметические и логические
выражения, описания, циклы и т. п.).
Во-вторых, для всякой конструкции входного текста транслятор должен
суметь построить без изменения смысла соответствующую ей конструкцию
выходного языка. Например, если в результате анализа входного текста
выявлено арифметическое выражение ху 4- х, то транслятор должен
построить на выходном языке программу, которая, перемножив х и у, к
полученному результату прибавила бы х.
Задача анализа может быть решена формально. Однако построить конструкции
выходного языка пока что можно только эвристическими методами.
Процесс трансляции начинается с чтения исходного текста. Процедура
чтения текста входной программы или программы на промежуточном языке со
всей последующей обработкой называется проходом транслятора. По числу
проходов трансляторы делятся на одно-, двух- и многопроходные.
В тех языках программирования, в которых описание переменных и процедур
(подпрограмм) предшествует моменту обращения к ним (вызову), для
трансляции достаточно одного прохода. Сложным в этом случае может быть
лишь обработка операторов перехода (если адреса меток передачи
управления еще не определены).
В тех языках программирования, в которых описание переменных или
процедур (подпрограмм) может быть выполнено после обращения к этим
переменным или процедурам, однопроходный транслятор не может перевести
соответствующую часть входного текста в выходную программу, так как тип
переменных еще не определен и поэтому нельзя сказать, над какими числами
(целыми, вещественными или какими-либо другими) будет выполнена
операция. Для таких случаев используются двухпроходные трансляторы. На
первом этапе во входной программе выявляются синтаксические ошибки и
печатаются сообщения об этих ошибках, выделяются элементарные
конструкции языка (идентификаторы, операторы, выражения и т.п.),
составляются все необходимые таблицы, в том числе таблица адресов и
типов идентификаторов, типов процедур, их формальных параметров и т. п.
На втором этапе генерируется выходная программа - результат работы
транслятора.
Если в исходной программе на первом этапе обнаружены синтаксические
ошибки, то генерировать выходную программу бессмысленно - она не будет
работать. В этом случае транслятор выдает распечатки ошибок и процесс
трансляции, как правило, прекращается.
Если в трансляторе имеются специальные блоки, оптимизирующие выходную
программу или структура входного языка очень сложная, то используется
многопроходный транслятор.
При первом проходе (первый этап) исходная программа переводится на
промежуточный язык. Перевод исходной программы на промежуточный язык
делается для сокращения ее объема и упрощения структуры, что облегчает
работу транслятора при последующих проходах.
Во втором проходе обычно распределяются точки вычисления выражений,
устраняются общие выражения, производится так называемая чистка циклов
(вынос за пределы цикла операторов, не содержащих переменной цикла) и
распределение индексных регистров для вычисления значений переменных.
В третьем проходе генерируется (и оптимизируется) выходная программа.