Page 50 - 4761
        P. 50
     4  ВНУТРІШНЄ ПРЕДСТАВЛЕННЯ ПРОГРАМИ
                         4.1 Способи внутрішнього представлення програм (ВПП)
                         Всі способи внутрішнього представлення програми, як правило, містять в собі дві
                  принципово  різні  речі  –  оператори  та  операнди.  Різниця  між  формами  внутрішнього
                  представлення програми тільки в тому, як оператори і операнди  з’єднуються між собою.
                         Є наступні форми (ВПП):
                         -      зв’язні спискові структури, які представляють синтаксичні дерева;
                         -      багатоадресний код з явно названим результатом (тетради);
                         -      багатоадресний код з неявно названим результатом (тріади);
                         -      зворотній польский запис операцій;
                         -      асемблерний код або машинні команди;
                         Синтаксичні  дерева  –    структура,  яка  є  результатом  роботи  синтаксичного
                  аналізатора – це машинно незалежна форма ВПП. Недолік – вони представляють складні
                  зв’язні  структури,  а  тому  не  можуть  бути  тривіальним  чином  перетворені  в  якісну
                  послідовність команд результуючої програми.
                         Вони можуть бути перетворені в другі форми ВПП.
                         Тетради представляють собою запис операцій в формі 4-х складових: операція, 2
                  операнда  і  результат  операції.  Наприклад,  <операція>,  (<операнд  1>,  <операнд  2>,
                  <результат операції>).
                         Тетради  представляють  собою  лінійну  послідовність  команд.  При  обчисленні
                  виразу, записаного у формі тетрад, вони обчислюються одна за другою послідовно. Якщо
                  якийсь  з операндів в тетраді відсутній , то він може бути пропущеним, або замінений
                  пустим операндом (наприклад, ).  Результат пропущеним не може бути.
                         Оскільки тетради це лінійна послідовність, тому нескладно написати тривіальний
                  алгоритм,  який  буде  перетворювати  послідовність  тетрад  в  послідовні  команди
                  результуючої програми. В цьому перевага. Це машинно незалежна форма представлення
                  програми.
                         Приклад 4.1. Вираз A:=B*C+D-B*10, запишемо у вигляді тетрад.
                         1.     *(B, C, T1)
                         2.     +(T1, D, T2)
                         3.     *(B, T0, T3)
                         4.     –(T2, T3, T4)
                         5.     :=(T4, , ∆), де  – незначущий операнд
                         Іденфікатори  Т1,...Т4,  тимчасові  змінні,  які  використовуються  для  збереження
                  обчислення тетрад.
                         Тетради  вимагають  більше  пам’яті,  ніж  тріади  і  не  відображають  взаємозв’язок
                  операцій між собою.
                         Недолік: складності з перетворенням в машинний код.
                         Тріади  представляють собою запис операцій  в формі з 3-х складових: операція  і
                  два операнди. Наприклад, <операція>, (<операнд 1>, <операнд 2).
                         Особливістю  тріад  є  те,  що  один  або  два  операнди  можуть  бути  посиланням  на
                  другу тріаду в тому випадку, якщо операнд деякої тріад виступає як результат виконання
                  другої  тріади.  Тому  тріади  при  запису  послідовно  нумерують  для  зручності  указування
                  посилань одних тріад на інші.
                                                                48
     	
