- •4.Основні частини компілятора.
- •5Лексичний аналіз роботи з таблицями
- •6. Синтаксичний та семантичний аналіз, дерева
- •7. Польський запис, тетради.
- •8. Формальне визначення мови, операції над мовами.
- •9. Граматики
- •11.Регулярний вираз
- •12) Нормальна форма Бекуса-Наура
- •13. Ієрархія Хомського
- •14. Регулярні граматики.
- •15. Скінченні автомати
- •16. Детерміновані і недетерміновані кінцеві автомати.
- •18. Побудова детермінованих кінцевих автоматів за недетермінованими кінцевими автоматами.
- •19. Програмування сканера.
- •20. Таблиці символів, хеш-функції, хеш-адресація
- •21. Колізія, ре хешування
- •23.Контекстно-выльны граматики.
- •24. Синтаксично-керований переклад
- •25. Переклад інфіксної форми запису у польську
- •26. Алгоритм синтаксично-керованого перекладу:
- •27. Автомати з магазинною пам’яттю
- •28. Операторні граматики
- •29.Алгоритм розборуоператорних грамматик.
- •37. Оптимізація булевих виразів, циклів.
- •38. Генерація коду. Скп на мову Асамблер.
- •39. Інтерпретатори, адресація, представлення ідентифікаторів.
- •40 Компілятор компіляторів.
- •41 Генератор лексичних аналізаторів.(lex)
- •42. Генератор синтаксичних аналізаторів.
- •43. Приклади застосування генераторыв.
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
Інваріант можна винести за цикл.
Для реалізації методу потрібно:
Розпізнати інваріанту
Визначити місце переносу
Перенести інваріант
Незручності методу:
Відстежити нелегко, бо він залежить
Не враховуються побічні ефекти, якщо аргументом інваріанти є формули або залежать від функції.
Проблеми зв’язані з оптимізацією:
Потрібно зіставляти очікування витрат від підвищення ефективності об’єктної програми з додатними накладними виконаннями тетродами, що пов’язані з часом компілювання, надійністю роботи і складністю компілятора.
З оптимізацією пов’язані: погіршення коду і складність трасування програм, складно виявити чи усунуті побічні ефекти.
Приклад: ми працюємо зі стеком і при роботі використовуємо функції Push() і pop(). Нехай потрібно витягнути з стеку два числа і помістити в стек їх початкову суму
А:= pop()
В:= pop()
С:=А‖ В
Push (С)
Або
Push (pop ()‖pop())
Якщо активізуючий , то може враховувати два pop зайвим, то Push (pop ())
1. Необхідно зіставляти вади
2. оптимізація не завжди приводить до покращення коду і можуть зявитися побічні ефекти.
3. Чим більше обчислюючої роботи перекладається на компілятора, тим ефективніша буде програма.
4. Найкращою є внутрішня форма представлень програми у вигляді тетрад.
5. Найпростіший прийом оптимізації – писати гарні програми.