Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТЯП_шпоры.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
3 Мб
Скачать
☆

Вопрос 36

Определение 4.7. Тетрады - это запись операций в форме из четырех составляющих: операции, двух операндов и результата операции.

Например, тетрады могут выглядеть так:

<операция>(<операнд1>, <операнд2>, <результат>).

Каждая тетрада в последовательности вычисляется так: операция, заданная тетрадой, выполняется над операндами и результат ее выполнения помещается в переменную, заданную результатом тетрады.

Определение 4.8. Триады – это запись операций в форме из трех составляющих: операция и два операнда.

Например, триады могут иметь вид:

<операция>(<операнд1>, <операнд2>).

Особенностью триад является то, что один или оба операнда могут быть ссылками на другую триаду в том случае, если в качестве операнда данной триады выступает результат выполнения другой триады. Каждая триада в последовательности вычисляется так: операция, заданная триадой, выполняется над операндами, а если в качестве одного из операндов (или обоих операндов) выступает ссылка на другую триаду, то берется результат вычисления той триады. Результат вычисления триады хранится во временной памяти.

Если какой-то из операндов в тетраде или триаде отсутствует, то он опускается или заменяется пустым операндом (в зависимости от принятой формы записи и ее реализации). Результат вычисления тетрады никогда опущен быть не может, иначе тетрада теряет смысл.

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

Линейную последовательность тетрад или триад проще преобразовывать в последовательность команд результирующей программы, чем синтаксические деревья. В отличие от команд ассемблера, тетрады и триады являются машинно-независимой формой внутреннего представления программы.

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

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

Пример 4.4. Дано арифметическое выражение X:=Y/2-Z+X*5.

Выражение, записанное в виде тетрад, будет иметь вид:

/ (Y, 2, T1);

- (T1, Z, T2);

* (X, 5, Т3);

+ (Т2, Т3, Т4);

:= (X, Т4, ).

Идентификаторы Т1,…,Т4 обозначают временные переменные, используемые для хранения результатов вычисления тетрад. В последней тетраде, которая требует только одного операнда, в качестве второго операнда выступает пустой операнд.

То же выражение, записанное в виде триад, будет иметь вид:

1) / (Y, 2);

2) - (^1, Z);

3) * (X, 5);

4) + (^2, ^3);

5) := (X, ^4).

Здесь знак ^ означает ссылку операнда одной триады на результат другой.