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
   45   46   47   48   49   50   51   52   53   54   55