Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OPI_konspekt.doc
Скачиваний:
8
Добавлен:
01.04.2025
Размер:
5.78 Mб
Скачать

6.5.6.1. Усунення ідентичних операторів

i-та операція вважається зайвою, якщо існує більш рання ідентична j-та операція і ніяка змінна, від якої залежить ця операція, не змінюється третьою операцією, що лежить між i-тою і j-тою операціями

Оператор F вважається ідентичним і може бути усунутий із програми, якщо існують інші оператори G1,G2,...Gn, такі, що

1) оператор F і всі оператори G1, G2, ... Gn виконують ту саму операцію над тими самими операндами;

2) не існує шляху від присвоювання значень операндів оператора F до самого оператора F, що не проходив би спочатку через оператори G.

6.5.6.2. Заміна змінних в операторах умовного переходу і усунення невикористовуваних визначень.

У результаті скорочення глибини операції рекурсивна програмна змінна (визначена через саму себе), що є керівною в операторі умовного переходу, може бути замінена в ньому генерованою змінною t(mt- ідентифікатором).

Це у свою чергу може привести до того, що рекурсивно означена програмна змінна використовуватися в блоці не буде і саме визначення може бути усунуте.

Визначення не використовується і може бути усунуто, якщо результат визначення не є операндом жодного оператора рекурсивного визначення і результат цього останнього не використовується ні в якому іншому операторі.

Існування невикористовуваних визначень до оптимізації є помилкою програміста. Але після оптимізації такі означення можуть виникнути як результат перестановки і зміни окремих операторів у процесі оптимізації.

for даного визначення в даному блоці провадиться пошук використання цього означення у всіх наступних командах блоку і у всіх блоках, що можуть іти за ним. Пошук припиняється, коли знаходиться оператор, що використовує дане визначення як аргумент. Якщо такий оператор у даному і наступних блоках знайдений не буде, то означення вважається невикористовуваним та усувається.

Як тільки невикористовуване визначення усунуте, всі оператори, від яких залежав усунутий оператор, якщо вони ніде більше не використовуються, можуть бути усунуті

6.5.6.3. Усунення марних операторів і змінних

Якщо блок містить такий оператор S, що змінна, якій привласнюється значення в S, не є активною після цього оператора, то S - марний оператор. Іншими словами,S - марний оператор, якщо він привласнює значення змінній, що не є вихідний і на яку немає посилання в наступних операторах

Змінна А називається активною після виконання оператора Si, якщо

- їй привласнене значення оператором Si;

- їй не привласнені значення операторами Si+1,...Sj;

- на неї посилається оператор Sj+1.

if оператор Si привласнює значення змінній А і вона неактивна після моменту i, то

- при i>0 можна видалити Si з P

- при i=0 можна видалити A з I

Наприклад, нехай B=(P,I,U), де I={ A,B,C }, U={ F,C } і P складається з

F:=A+A

G:=F*C

F:=A+B

G:=A*B

Другий оператор марний, тому що його область дії порожня. Таким чином, одне застосування перетворення усунення марних операторів відображає B у B1=(P1,I,U), де P1 складається з

F:=A+A

F:=A+B

G:=A*B

Тепер у B1 марна вхідна змінна C і перший оператор. Застосувавши те ж перетворення, можна одержати B2=(P2,{A,B},U), де P2 складається з

F:=A+B

G:=A*B

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]