посередно Звертатися до команд результуючої програми.
синтаксичні дерева могут буті перетворені в Другие форми внутрішнього представлення програми, что представляються собою лінійні списки, з урахуванням семантики вхідної мови. Алгоритми такого роду перетвореності розглянуті далі. Ці Перетворення віконуються на Основі Принципів СК-компіляції.
Багатоадресній код з явно іменованім результатом (зошити)
Зошити являютя собою запис операцій У ФОРМІ з чотірьох складових: Операції, двох операндів и результату Операції. Наприклад, зошити могут віглядаті так:
Зошити являютя собою лінійну послідовність команд. При обчісленні вирази, записаного У ФОРМІ тетрад, смороду обчислюють одна за іншою послідовно. Кожна тетрада в послідовності обчіслюється так: Операція, задана зошитів, віконується над операндами и результат ее Виконання містіться в змінній, заданій результатом зошити. Если Якийсь з операндів (чі обидва операнда) у тетраді відсутні (Наприклад, ЯКЩО тетрада являє собою Унарні операцію), то ВІН может буті опущень чг чинний порожнім операндом (у залежності від прійнятої форми Записів и ее реалізації).
Зошити являютя собою лінійну послідовність, а тому для них нескладно напісаті трівіальній алгоритм, Що буде перетворювати послідовність тетрад у послідовність команд результуючої грами (або послідовність команд асемблера). У цьом їхня перевага перед синтаксичними деревами. На відміну від команд асемблера зошити НЕ залежався від архітектури обчіслювальної системи, на якові орієнтована рез ультуюча программа. Тому смороду являютя собою машинно-незалежну форму внутрішнього представлення програми.
Зошити вімагають больше пам'яті для свого представлення, чем тріади, смороду такоже НЕ відображають явній Взаємозв'язок операцій между собою. Крім того, є складності з перетворенням тетрад у машини код, ТОМУ ЩО смороду погано відображаються в команді асемблера и машінні коди, оскількі в наборах більшості СУЧАСНИХ комп'ютерів Рідко зустрічаються Операції з трьома операндами.
Багатоадресній код з неявно іменованім результатом (тріади)
тріади являютя собою запис У ФОРМІ трьох складових:
<Операція> (<операнд1>; <операнд2>)
Їх особлівістю є ті, что один або Обидва операнди могут буті посилання на агентство іншу тріаду. Це в того випадка, ЯКЩО в якості операнда даної тріади Виступає результат Виконання Іншої тріади. Тому тріади при запісі нумерують послідовно для зручності ПОСИЛАННЯ.
Кожна Тріада обчіслюється таким чином: Операція, яка задана тріадою, віконується над операндами, ЯКЩО в якості одного Із операндів або двох є посилання на агентство іншу тріаду, то береться результат обчислення тієї тріади. Результат обчислення кожної тріади нужно зберігаті в тімчасовій пам'яті, так як ВІН может знадобітіся Наступний тріадам. Если один операнд відсутній, ВІН может буті упущень.
ПЕРЕВАГА:
легке написання алгоритму;
легко перевести в Асемблер ний код.
Недолік: необхідній алгоритм для зберігання в пам'яті проміжного результату.
тріади є машинно незалежні, вімагають менше пам'яті чем зошити.
Обернений польський запис
Перевага: Ефективний для обчислення математичних віразів.
Недоліки:
звітність, використовуват стек
Важко делать оптімізацію
Нехай задано Арифметичний вирази увазі: (A + B) * (C + D)-E
представимости цею вирази у вігляді польського запису: AB + CD + * E-
Обернений польський запис володіє властівостямі, Які перетворюють его в Ідеальну проміжну мову при трансляції:
1. обчислення вирази может проводитись Шляхом одноразового перегляду, что ЗРУЧНИЙ для генерації кодом
2. Отримання польського запису просто здійсніті на Основі алгоритмом DX3.
13. Визначення формальної мови и граматики
В
Формальні мови - це математичний апарат, что дозволяє математичность грамотно создать мови програмування І писати компіляторі для них.
формальність мову можна Задати як послідовність слів. Слово - це послідовність сімволів. Тоді даже програму можна вважаті просто словом. p> Словами даної мови может буті НЕ довільній набор сімволів, а лексічно и синтаксичною правильно побудованій. Для того, щоб Задати граматику, треба Задати множини термінальніх и НЕ термінальніх сімволів.
Термінальні - це символи, Які Використовують в мові, а проміжні або нетермінальні - це символи, Які Використовують для создания слів мови. Створюються слова за граматичний правилами. ! Застосування правила Полягає в заміні в перетворюваному рядку якоїсь послідовності сімволів, что співпадає з лівою або правою Частинами правила.
Компілятор, отримай на вхід програму, Робить зворотнього роботу. ВІН згортає за граматичний правилами від правої до лівої Частини Початкові символи.
Кінцева множини сімволі...