Курсовая работа. / РЯП_Ксю / Other / tyap / Триады
.doc2.4. Триады и косвенные триады
Формат триады имеет вид:
<код операции>, <операнд1>, <операнд2> .
В качестве кодов операций триад можно использовать коды операций тетрад, за исключением операций условного перехода BE (BL, ВМ), которые для триад не используются.
В триадах отсутствует поле для записи результата. Если в качестве операнда некоторой триады нужно использовать результат выполнения другой (ранее выполненной) триады, то в соответствующее поле триады записывается ссылка на триаду, в которой этот результат был получен. Результаты выполнения триад хранятся отдельно.
Пример 1.
Запись в виде последовательности триад выражения А*В - С / D:
(1) *, А, В
(2) /, С, D
(3) -, (1), (2)
Номера триад указаны в скобках.
Количество триад и тетрад, необходимое для представления одних и тех же конструкций языка, является одним и тем же, но каждая триада занимает в памяти меньше места. Экономия памяти при использовании триад в качестве промежуточной формы программы по сравнению с тетрадами достигается также за счет того, что после выполнения триады, в которой одним из операндов является результат выполнения i-й триады, ее результат может быть уничтожен.
При выполнении машинно-независимой оптимизации некоторые операции могут удаляться из промежуточного представления программы или переставляться на другое место. При использовании тетрад такие преобразования не вызывают затруднений. В случае же триад могут возникнуть осложнения за счет того, что триады ссылаются друг на друга. Поэтому, если машинно-независимая оптимизация будет выполняться, необходимо либо хранить все результаты выполнения триад, либо использовать косвенные триады.
Косвенные триады представляются двумя списками. В первом списке хранятся сами триады, причем одинаковые триады в список заносятся только один раз. Второй список содержит номера триад в порядке их выполнения. При использовании косвенных триад перестановка и исключение идентичных операций во время машинно-независимой оптимизации производятся путем преобразования списка, содержащего номера триад. При этом вид триад и их количество в списке не изменяются. Использование косвенных триад приводит к дополнительному сокращению объема памяти, необходимого для хранения промежуточной формы программы, если исходная программа содержит большое число идентичных операций (обычно это имеет место при наличии в программе большого числа индексированных переменных).
Пример 2.
Представить с помощью косвенных триад следующие операторы языка ПАСКАЛЬ:
А := В[j] + В[j + 1]; С := В[j] - B[j + 1]; D := B[j] + 2*В[j + 1];
Решение
Список триад Порядок выполнения триад
(1) SUBS, В, j (1), (2), (3), (4), (5),
(2) + , j, 1 (1), (2), (3), (6), (7),
(3) SUBS, В, (2) (1), (2), (3), (8), (9), (10)
(4) + , (1), (3)
(5) := (4), А
(6) -, (1), (3)
(7) :=, (6), С
(8) * , 2, (3)
(9) +, (1), (8)
(10) := , (9), D