Скачиваний:
19
Добавлен:
01.05.2014
Размер:
428.08 Кб
Скачать

Пример 2.1

Перевод условного оператора if x = 10 then A[j] := A[j +1] else A[j] := 0 в ПОЛИЗ при условии, что оператор записывается в ПОЛИЗ, начиная с позиции k, имеет вид:

k+13 x 10 – BZ A j 2 SUBS 0 := k+24 BR A j SUBS A j 1 – 2 SUBS :=

k k+13 k+24

С помощью рассмотренных операций можно представить в ПОЛИЗ практически любую конструкцию языка. Например, оператор цикла языка ПАСКАЛЬ for I := E1 to E2 do S, где E1 и E2 – арифметические выражения, а S – последовательность операторов присваивания, может быть представлен в ПОЛИЗ последовательностью операторов присваивания, условного и безусловного переходов.

Каждый элемент ПОЛИЗ представляет собой одну лексему. При этом коды операций и номера элементов ПОЛИЗ рассматриваются как лексемы специального типа.

2.3. Тетрады

Для бинарных операций удобной формой представления являются тетрады вида

<код операции>, <операнд_1>, <операнд_2>, <результат>,

где <операнд_1> и <операнд_2> специфицируют аргументы, а <результат> – результат из рабочей области. В качестве операндов тетрад наряду с переменными и константами могут выступать результаты ранее выполненных тетрад. Например, выражение A B + C D представляется в виде последовательности следующих тетрад (запятая – разделитель полей тетрады – во внутреннем представлении отсутствует):

, A , B, T1

, C, D, T2

+ , T1, T2, T3

В отличие от обычной записи тетрады располагаются в том порядке, в котором они должны выполняться. Операнды одной тетрады должны быть одинакового типа. Для преобразования типа операнда используются тетрады преобразования типа ITOA (целый – в вещественный) и ATOI (вещественный – в целый). Поскольку операция преобразования типа – одноместная, она записывается с пустым вторым операндом, например

ATOI, A , , Т

Для представления унарного минуса в тетрадах также можно не использовать второй операнд: – , А, , Т, что означает “присвоить Т значение –А”.

Выборка элемента одномерного массива, например элемента A[i], выполняется с помощью тетрады: SUBS, A , i, T

Представление элементов многомерных массивов с помощью тетрад основано на приведении многомерного массива к одномерному. Так, если двухмерный массив A[n, m] отображается в памяти по строкам и нумерация индексов начинается с нуля, то обращение к элементу массива A[i, ,j] можно записать следующим образом:

–, m, 1, T1

, T1, i, T2

+, T2, j, T3

–, T3, 1, T4

SUBS, A, T4, T5

Обращение к функции записывается с помощью одной или нескольких тетрад в зависимости от числа аргументов (параметров) функции. Так, обращение к функции F с аргументами Т1, Т2, Т3 записывается в виде

CALL, F, T1,

, T2 T3, T4 ,

а обращение к функции ABS(A) – в виде

CALL, ABS, A, T .

Формат тетрад для представления оператора присваивания, операторов безусловного и условного переходов приведен в табл. 2.2.

Таблица 2.2

Тетрады для записи некоторых операторов

Тетрада

Семантика тетрады

BLBEG, , ,

Начало блока

BLEND, , ,

Конец блока

:= , B, , A

A := B

DEFL , L, ,

Определение метки L

BRL, L, ,

Безусловный переход на тетраду с меткой L

BR, m, ,

Безусловный переход на тетраду с номером m

BZ , m, E ,

(BP, BM)

Переход на тетраду с номером m, если значение переменной Е равно нулю (больше нуля, меньше нуля)

BE, m, E1, E2

(BL, BG)

Переход на тетраду с номером m, если значение операнда E1 равно (меньше, больше) значению операнда Е2

Тетрады удобно использовать для выполнения машинно-независимой оптимизации (исключения лишних операций). Основным недостатком тетрад является большой объем памяти, необходимый для их хранения. Несмотря на то, что во многих тетрадах имеются свободные поля, результат выполнения операции всегда записывается в четвертое поле.

Внутреннее представление тетрады – запись, состоящая из четырех лексем. При этом коды операций тетрад, пустые поля, номера тетрад и переменные Тi являются лексемами специального типа.

Соседние файлы в папке ФОРМАЛЬНЫЕ МЕТОДЫ ОПИСАНИЯ ПЕРЕВОДА