
- •Скінчені детерміновані автомати. Математична модель, форми представлення. Оптимізація.
- •Формальне визначення
- •Приклад
- •Переваги і недоліки
- •Стекові автомати. Представлення, операції, принцип роботи. Магазинний автомат (ма)
- •Стековий автомат (са)
- •Організація автомата з магазинною пам'яттю
- •Операції автомата
- •Регулярні вирази та граматики. Синтаксичні діаграми.
- •Синтаксис регулярних висловів
- •Модель мовного транслятора. Фази мовного аналізу.
- •Представлення синтаксичної структури формальної мови. Форма Бекуса-Наура.
- •Представлення проміжного коду. Елементарні операції, польський запис.
- •Формування проміжного коду
- •Поняття оптимізації проміжного коду. Оптимізаційні операції.
- •Графічне представлення лінійних ділянок проміжного коду. Перетворення на графах.
- •Загальна модель операційної системи. Загальна та машинно-залежна складові.
- •Забезпечення функцій ос. Управління пам’яттю та зовнішніми пристроями.
- •Підсистема управління оперативною пам'яттю
-
Поняття оптимізації проміжного коду. Оптимізаційні операції.
Оптимізація проміжного коду - виділення загальних подвираженія та обчислення константних подвираженія. Фаза оптимізації призначена для зменшення надлишковості програми за витратами часу та пам'яті. У залежності від критеріїв проектування транслятора дана фаза обробки програми може виключатися з циклу обробки програми.
Для
побудови проміжного коду реальної
обчислювальної системи окрім особливостей
безпосереднього алгоритму слід врахувати
і функціональні можливості системи ,
тобто виділену ОП, систему аналізу,
наявність регістрів та наявність
операцій. В
реальних компіляторах для побудови
остаточного коду враховуються всі
особливості обчислювальної системи, а
також відбуваються оптимізаційні
перетворення на рівні елементарних
команд. В загальному випадку оптимізаційні
перетворення стусуються будь-якої
частини алгоритму, але найбільш прості
та показові є оптимізації лінійних
ділянок. Блоком або лінійною ділянкою
в проміжному коді називається частина
алгоритма яка складається з послідовності
операцій присвоєння. Нехай множина
це
деяка множина зміних,
- множина операцій, при чому множини
і
- скінченні і не перетинаються. Операція
здійснюється над однією або декількома
змінними. Оператором присвоєння
називається вираз
,
де
-операція, А1,В1,…,Br – змінні, r
– кількість зміних що беруть участь в
операціях. Такий вираз означає що
операція
присвоює значення зміній А і посилається
на змінні В1,…,Br. Процес спрощення
лінійної ділянки при якому отримуються
еквівалентні блоки називаються
оптимізацією. Два блоки називаються
еквівалентними якщо їх значення рівні
на всьому періоді оцінювання відповідних
паралельних кроків. З точки зору
термінології оптимальним вважається
найкращий за деякою ознакою зв'язок
задачі. Щодо оптимізації обчислювального
процесу даний термін незовсім коректний
і передбачає знаходження нової
послідовності дій, яка приводить до
ідентичного результату за менший час,
з меншими затратами, меншою кількістю
операторів, та використання меншої
кількості додаткових зміних. Для
будь-якого блоку існує безліч інших
еквівалентних блоків, серед яких є хоча
б один блок з мінімальною кількістю
операторів. Для отримання мінімального
блоку можна застосувати наступні
перетворення:
-
Перетворення вилучення безкорисних операцій присвоєння (Т1). Якщо змінна А неактивна після оператора
, то
-
якщо і>0 то оператор
можна вилучити з множини Р.
-
якщо і=0 то оператор
можна вилучити з множини І.
-
Якщо змінна А належить до вхідних змінних і в блоці не використовується, змінну можна вилучити, або якщо змінній А деяким оператором присвоюється значення і дане значення не використовується можна вилучити оператор.
-
Вилучення надлишкових обчислень (Т2). Часто в програмах виникають ситуації коли ідентичні обчислення виконуються повторно. Такі обчислення називаються надлишковими.
-
Перетворення переіменування (Т3). Оскільки блок є відносно незалежним для якого фіксованим є вхідна і вихідна множина то назви внутрішніх змінних не впливають на значення блоку.
-
Перетворення перестановки (Т4).
Перетворення Т1-Т4 дозволяють зменшити кількість операцій проміжного коду з метою позбавлення безкорисних та повторних дій. В програмах де проводиться багато математичних обчислень оптимізацію коду можна отримати і за рахунок застосування алгебраїчних законів. Як правило використовуються наступні алгебраїчні перетворення:
-
Закон комутативності. Операцією
називають комутативною, якщо а
b=b
a.
-
Операція
називається асоціативною якщо (a
b)
c=a
(b
c).
-
Операція
1 називається дистрибутивною відносно операції
2 якщо a
1(b
2c)=a
1b
2a
1c
-
Операція
іденпотентною якщо,
а=а.