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

28. Операторні граматики

Пріорітетом символів вхідної послідовності: нехай є вхідна послідовність символів, яка зображ. Потр. визначити яке правило можна застосувати до R, якщо далі йде S. Введемо пон. Пріоритетів, що базуються на системі відношень між символами.

Для будь-якого ланцюжка таким виглядом можливі варіанти відношень:

1)якщо пр. що закінчується на R, то будем вважати, що .

2) якщо пр. яке виключає , тоді можна сказати, що R=S.

3) якщо пр. яке починається на тоді , S- є термінальний символ.

29.Алгоритм розборуоператорних грамматик.

Для розбору потрібно 2 стекі(аргументів (ARG), операторів(ОР)). Позначимо через S верхній символ в стеці операторів ОР. R- вхідний символ.

1. Якщо R ідентифікатор то помістимо його в стек ARG.

2. Якщо F(S)<G(R) то помістити R в стек операторів ОР і взяти наступний символ.

3. Якщо F(S)>=G(R) то викликати симантичну процедуру яка визначається S.

37. Оптимізація булевих виразів, циклів.

Цей метод оснований на властивостях мулевих виразів. Приклад: є запит (if a and b and c) then оператори end if.

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

Отримаємо:

if (not a) then go to Label;

If (not b) then go to Label;

If (not c) then go to Label;

<оператори>

Label:

Можуть з’являтися побічні ефекти, якщо аргументом є функції.

Винесення інваріантних обчислень за межі циклу.

Одним з найефективніших і дає найбільш відчутні результати

for (i:=0,i++)

begin

a:=b+c -- iнваріант (те що не залежить від коду)

………

end

Інваріант можна винести за цикл.

Для реалізації методу потрібно:

  1. Розпізнати інваріанту

  2. Визначити місце переносу

  3. Перенести інваріант

Незручності методу:

  1. Відстежити нелегко, бо він залежить

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

Проблеми зв’язані з оптимізацією:

  1. Потрібно зіставляти очікування витрат від підвищення ефективності об’єктної програми з додатними накладними виконаннями тетродами, що пов’язані з часом компілювання, надійністю роботи і складністю компілятора.

  2. З оптимізацією пов’язані: погіршення коду і складність трасування програм, складно виявити чи усунуті побічні ефекти.

Приклад: ми працюємо зі стеком і при роботі використовуємо функції Push() і pop(). Нехай потрібно витягнути з стеку два числа і помістити в стек їх початкову суму

А:= pop()

В:= pop()

С:=А‖ В

Push (С)

Або

Push (pop ()‖pop())

Якщо активізуючий , то може враховувати два pop зайвим, то Push (pop ())

1. Необхідно зіставляти вади

2. оптимізація не завжди приводить до покращення коду і можуть зявитися побічні ефекти.

3. Чим більше обчислюючої роботи перекладається на компілятора, тим ефективніша буде програма.

4. Найкращою є внутрішня форма представлень програми у вигляді тетрад.

5. Найпростіший прийом оптимізації – писати гарні програми.

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