Конструирование трансляторов для языков программирования высокого уровня. Ярушкина Н.Г. - 32 стр.

UptoLike

Составители: 

- 33 -
особенности архитектуры базовых машин. Форматы компоновщика и
загрузчика определяют конкретную форму объектного кода.
2. Генерация кода для выражения.
Генератор кода получает для обработки программу, в которой
все выражения приведены в постфиксную форму. Выражения в такой
форме не нуждаются в скобках для задания порядка операций. Для
обработки выражений обычно используют стековую структуру данных,
в результате, вычисление выражения сводится к следующему: необхо-
димо читать лексему выражения, если эт а лексема операция, то опе-
ранды именно этой операции предшествуют в стеке знаку операции и
легко выделить исполняющую тройку, в составе операции и двух опе-
рандов, затем операция выполняется. Все элементы тройки выталки-
ваются из стека, а на их место записывается результат. Обработка
выражения продолжается до тех пор, пока в стеке не останется зак-
лючительный результат.
В блоке генерации кода осуществляются не вычисления, а гене-
рация объектного или ассемблерного кода, соответствующего отдель-
ным тройкам. Для каждой операции в известной системе команд
возможно построить заготовки выполнения операции, каждая из кото-
рых будет содержать команды загрузки, выполнения операции и запо-
минание результата. Запоминание результата осуществляется в про-
межуточных переменных, которые порождаются генератором кода и не
имеют аналогичных переменных в выражениях языка высокого уровня.
Генератор кода для выражений представляет собой блок типа "вы-
бор" (case), в котором в зависимости от вида операций выбирается
нужная заготовка.
3. Генерация сегментов данных.
Для генерации сегмента данных необходимо каждой переменной
отвести область памяти, достаточную для ее расположения, и адрес
данной области использовать в объектном коде вместо имени пере-
менной. Если есть константа, то: 1) константу объявляют как пере-
менную, но по адресу записывают значение константы, или 2) ис-
пользуют непосредственную адресацию.
При объявлении в сегменте данных сложно-структурированных
элементов генератор кода обычно создает специальные управляющие
структуры данных - информационные вектора. Например, для каждого
массива компилятор языка РL/1 создает поля: длина каждого поля