Б1 В4
Алгоритмические языки высокого уровня дают программисту достаточно просто и удобно описывать алгоритмы и решения многих прикладных задач такое описание называют исходной программой, а язык высокого уровня – входным языком.
ОПР) Языковым процессором называют – программу на машинном языке, позволяющую Вычислительной машине понимать и выполнять программы на входном языке.
Различают 2 вида языковых процессов интерпретаторы и трансляторы.
ОПР) Интерпретатор – это программа которая в качестве входа допускает программу на входном языке и по мере распознавания конструкции входного языка реализует их, выдавая на выходе результат вычислений, предписанные исходной программой
ОПР) Транслятор – это программа которая допускает на входе исходную программу и порождает на своем выходе программу, функционально эквивалентную исходной, называемую объектной.
Объектная программа записывается на объектном языке. В частном случае объектным языком может быть машинный язык, и в том случае полученную на вхоже транслятора программу можно сразу выполнить на ЭВМ (интерпретировать). При этом ЭВМ является интерпретатором объектной программы в машинных кодах. В общем случае объектный язык необязательно должен быть машинным или близким к нему (автокодом).
В качестве объектного языка может служить некоторый промежуточный язык – язык, лежащий между входным и машинным языками.
Если в качестве объектного языка используется промежуточный язык, то возможны два варианта построения транслятора.
1) Для промежуточного языка имеется (или разрабатывается) другой транслятор – с промежуточного языка на машинный и он используется в качестве последнего блока проектируемого транслятора.
2) 2) Построить интерпретатор команд промежуточного языка и его м/о использовать в качестве последнего блока транслятора.
Преимущество интерпретатора проявляется в отладочных и диалоговых трансляторах,
обеспечивающих работу пользователя в диалоговом режиме, вплоть до внесения изменений в программу без ее повторной полной перетрансляции.
ОПР) Транслятор использующий в качестве входящего языка язык, близкий к машинному, традиционно называется ассемблером. Транслятор для языка высокого уровня – компилятором.
Перевод программы с одного языка на другой, в обычном случае состоит в изменении алфавита, лексики и синтаксиса языка программы с сохранением семантики. Процесс транслирования исходной программы в объектную разбивается на несколько независимых подпроцессов (фаз трансляции) которые реализуются соответствующими блоками транслятора.
Удобно считать основными фазами трансляции анализ и синтез объектной программы
1) Лексический анализ
2) Работа с таблицами
3) Синтаксический анализ или разбор
4) генерация кода, или трансляция в промежуточный код.
5) Оптимизация кода
6) Генерация объектного кода (ассемблирование)
В соответствии с упрощенной функциональной моделью входная программа прежде всего подвергается лексической обработке. Цель лексического анализа – перевод исходной программы на внутренний язык компилятора, в котором ключевые слова, идентификаторы, метки и константы приведены к одному формату и заменяются условными кодами: числовыми или символьными, которые называются дескрипторами. Каждый дескриптор состоит из 2х частей. Класса (типа) лексем и указателя на адрес памяти, где хранится информация о конкретной лексеме. Обычно эта информация организуется в виде таблиц. Одновременно с переводом проводится лексический контроль выявления в программе недопустимых слов.
Синтаксический анализатор воспринимает выход лексического анализатора и переводит последовательность образов лексем в форму промежуточной программы.
Промежуточная программа является представлением синтаксического дерева программы.
Последнее отражает структуру исходной программы т.е порядок и связи между ее операторами. В ходе построения синтаксического дерева выполняется синтаксический контроль – выявление синтаксических ошибок в программе.
Фактическим выходом синтаксического анализатора может быть последовательность команд, необходимых для того, что бы строить промежуточную программу, общаться с таблицами справочника, выдавать, когда требуется, диагностические сообщения.
Непосредственно генерации объектной программы часто предшествует семантический анализ, который включает в себя различные виды семантической обработки.
Семантический анализ может
выполняться и на более поздних фазах трансляции, например, на фазе оптимизации
программы. Цель оптимизации – сокращение временных ресурсов или ресурсов
оперативной памяти, требуемых для выполнения объектной программы.