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