
- •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. Приклади застосування генераторыв.
23.Контекстно-выльны граматики.
Контекстно-вільною, або КВ-граматикою, називається граматика, в якій ліві частини всіх продукцій є нетерміналами. Зміст терміну "контекстно-вільна" полягає в тім, що застосування продукції A w до ланцюжка uAv не залежить, тобто є вільним від сусідніх з A символів, які утворюють контекст uv.
Зазначимо, що БНФ вигляду A::=w цілком аналогічна продукції A w. Отже, сукупності БНФ є просто іншою формою КВ-граматик.
Контекстно-вільною мовою (КВ-мовою) називається мова, що може бути задана КВ-граматикою.
КВ-граматики відіграють особливу роль у програмуванні, оскільки ними описується синтаксис практично всіх конструкцій мов програмування. Більше того, він описується КВ-граматиками, продукції яких задовольняють певні структурні обмеження. З використанням цих обмежень було побудовано алгоритми синтаксичного аналізу, час виконання яких прямо пропорційний довжині аналізованого слова. А лінійна складність цих алгоритмів великою мірою зумовила ефективність сучасних систем програмування.
24. Синтаксично-керований переклад
У нас є правила S→E; E→T; E→E+T; T→F; T→T*F; F→(a); F→(E)
E-вираз T-термін F-формула a-ідентифікатор
Перебирати варіанти будемо доти, поки не вийде фраза, що складається лише з термінальних символів – це так званий лівий вивід. Наприклад: а+а*а
S→E→E+T→E+T*F→T+T*F→F+F*F→a+a*a
Щоб сформувати використаємо прийом: застосування кожного правила граматики буде викликати виконання тої чи іншої процедури.
Розглянемо схему прикладу, який відображає синтаксичні вирази з мови, що створена граматикою у відповідні польські записи
E→E+T E=E+T
Правило |
Елемент перекладу |
E→E+T |
E=ET+ |
E→T |
T=T |
T→T*F |
T=TF* |
T→F |
T=F |
F→(E) |
F=E |
F→a |
F=a |
Визначимо вихід згідно схеми перекладу, що відповідає ланцюжку а+а*а. Спочатку за правилами схеми перекладу знайдемо вивід ланцюжка а*а, починаючи з S, потім визначимо послідовність пар множників.
(E,E) => (E+T,ET+) => (T+T,TT+) => (F+T,FT+) => (a+T,At+) =>(a+T*F,aTF*+) =>
(a+F*F,aFF*+) => (a+a*F,aaf*+) =>(a+a*a,aaa*+)
Кожен вихідний ланцюжок отримується з попереднього, заміною відповідного детермінала – правою частиною елемента перекладу, яка приєднується до правила, що застосовується при виводі вхідного ланцюжка.
Застосуємо наступний метод: застосування певного правила викликає дію, ці дії називаються семантичними процедурами
Розглянемо це на прикладі, але спочатку запишемо більш складну граматику.
Z::=E
E::=T|E+T|E-T|-T
T::=F|T*F|T/F
F::=a|(E)
N |
Правило |
Семант-програма |
1 |
Z::=E |
нема |
2 |
E::=T |
нема |
3 |
E::=E+T |
Push(‘*’) |
4 |
E::=E-T |
Push(‘-’) |
5 |
E::=-T |
Push(‘@’) |
6 |
T::=F |
нема |
7 |
T::=T*F |
Push(‘*’) |
8 |
T::=T/F |
Push(‘/’) |
9 |
T::=a |
Push(a) |
10 |
F::=(a) |
нема |
Push(‘…’) – здійснює додавання в кінець вихідного ланцюжка відповідного символа.
Потрібно враховувати наступне:
правило 1 застосовувати то, коли R= #
правила 2,3,4 застосовуються тоді, коли в R міститься №, +, -, ).
Таким чином для організації розбору без певного перебору нам потрібно буде стек S і куди заносимо розпізнаний вираз і змінна R – де зберігається символ, що зчитуємо.