
- •6.050102 “ Комп’ютерна інженерія” та 6.050101 “Комп’ютерні науки”
- •1. Графи. Основні поняття та визначення
- •1.1. Визначення графа
- •1.2. Типи скінченних графів
- •1.3. Суміжність та інцидентність
- •1.4. Способи задання графів
- •1.5. Маршрути і підграфи
- •На орграфі рис. 1.4, а маршрут (е1, е2, е5) – простий шлях, що є контуром, а маршрут (е1, е2, е3) – простий неконтурний шлях.
- •1.6. Зв'язність і роздільність
- •1.7. Характеристики графів
- •1.8. Дерева і ліс
- •1.9. Приклади задач, які використовують зважені графи
- •2.1. Логіка висловів. Загальні поняття
- •2.2. Формули алгебри висловів
- •2.3. Розв'язання «логічних» задач
- •2.4. Застосування алгебри логіки в теорії автоматів. Схеми перемикачів
- •2.5. Логіка першого порядку (логіка предикатів). Загальні поняття
- •2.6. Інтерпретація формул логіки предикатів
- •2.7. Передуюча нормальна форма
- •2.8. Логіка реляційна
- •2.9. Нечітка логіка. Загальні поняття
- •2.10. Нечітка алгебра
- •2.11. Нечітке числення
- •3. Булеві функції. Основні закони алгебри логіки
- •3.1. Цифрові автомати в схемотехніці та програмуванні
- •3.2. Висловлювання, предикати, булеві функції
- •3.3. Схемні реалізації булевих функцій
- •3.4. Найбільш поширені булеві функції
- •3.5. Основні закони алгебри логіки
- •4. Аналітичне подання булевих функцій. Функціонально повні системи булевих функцій
- •4.1. Досконала диз’юнктивна нормальна форма
- •4.2. Досконала кон’юнктивна нормальна форма
- •4.3. Досконала Шефферівська нормальна форма
- •4.4. Досконала Пірсівська нормальна форма
- •4.5. Функціонально повні системи булевих функцій
- •5. Мінімізація булевих функцій
- •5.1. Карти Карно
- •5.2. Мінімальна диз’юнктивна нормальна форма
- •5.3. Мінімальна кон’юнктивна нормальна форма
- •5.4. Мінімальна Шефферівська нормальна форма
- •5.5. Мінімальна Пірсівська нормальна форма
- •6. Абстрактні цифрові автомати
- •6.1. Основні поняття, пов’язані з абстрактними автоматами
- •6.2. Способи задання абстрактних автоматів
- •6.3. Приклади синтезу абстрактних автоматів
- •7. Синтез структурного автомата
- •7.1. Етапи канонічного методу структурного синтезу автоматів
- •7.2. Кодування станів
- •7.3. Побудова канонічної таблиці структурного автомата
- •7.4. Вибір елементів пам’яті автомата
- •7.5. Побудова таблиці збудження тригера
- •7.6. Побудова рівнянь функцій збудження і виходів автомата
- •7.7. Побудова функціональної схеми автомата
- •8. Проектування комбінаційних схем на дешифраторах і мультиплексорах
- •8.1. Синтез схем на дешифраторах
- •8.2. Синтез схем на мультиплексорах
- •9. Синтез мікропрограмного автомата за схемою алгоритму
- •9.1. Послідовність дій, необхідних для побудови управляючого пристрою
- •9.2. Синтез автомата Мілі
- •9.3. Синтез автомата Мура
- •10. Формальні мови і граматики
- •10.1. Визначення формальних мов і граматик
- •10.2. Приклади, що ілюструють первинні поняття
- •10.3. Порожня мова
- •10.4. Типи формальних мов і граматик
- •10.5. Виведення у кв-граматиках і правила побудови дерева виведення
- •10.6. Неоднозначні та еквівалентні граматики
- •10.7. Способи задання схем граматик
- •11. Контекстно-вільні граматики і автомати
- •11.1. Приведені граматики
- •11.2. Виключення ліворекурсивних правил
- •11.3. Виключення ланцюгових правил
- •11.4. Магазинні автомати
- •12. Спадні розпізнавачі
- •12.1. Розділені граматики
- •12.2. Побудова детермінованого спадного розпізнавача
- •12.3. Слаборозділені граматики
- •12.5. Побудова магазинного автомата
- •12.6. Приклади побудови спадного розпізнавача
- •4. Аналітичне подання булевих функцій.
- •8. Проектування комбінаційних схем на
- •9. Синтез мікропрограмного автомата за схемою
- •Теорія цифрових автоматів та формальних мов. Вступний курс
- •6.050101 “Комп’ютерні науки”
11. Контекстно-вільні граматики і автомати
11.1. Приведені граматики
З чотирьох типів граматик контекстно-вільні граматики (КВ) найбільш важливі з погляду додатків до мов програмування і компіляції. За допомогою КВ-граматики можна визначити велику частину структури мови програмування. При побудові граматик, що задають конструкції мов програмування, часто доводиться вдаватися до їх перетворення, щоб породжувана мова набула потрібної структури. Тому спочатку розглянемо трохи досить простих, але важливих перетворень КВ-граматик. Перший вид перетворення пов'язаний з видаленням із граматики зайвих символів. Зайві символи в граматиці можуть виявитися в таких випадках:
а) якщо символ не може бути отриманий при виведенні;
б) якщо із символу не може бути отриманий кінцевий термінальний ланцюжок (виходить нескінченний ланцюжок або немає правил, що приводять до термінального ланцюжка).
Спочатку розглянемо алгоритм виявлення символів, з яких не можна вивести кінцеві ланцюжки.
11.1.1. Визначення непродуктивних символів. Символ X Va називається непродуктивним, якщо з нього не може бути виведений кінцевий термінальний ланцюжок.
Розглядаючи правила граматики, можна зробити висновок, що, коли всі символи правої частини є продуктивними, то продуктивним є і символ, що стоїть у лівій частині. Останнє твердження дозволяє написати процедуру виявлення непродуктивних символів у такому вигляді:
1. Скласти список нетермінальних символів, для яких знайдеться хоча б одне правило, права частина якого містить термінальні символи або cимвол пусто ($).
2. Якщо знайдене таке правило і всі нетермінальні символи, які стоять у його правій частині, вже занесені до списку, то додати в список нетермінальний символ, що стоїть у його лівій частині.
3. Якщо на кроці 2 список більше не поповнюється, то отримано список усіх продуктивних нетермінальних символів граматики, а всі нетермінальні символи, які не потрапили в нього, є непродуктивними.
Приклад. Маємо граматику
Г11.1: R = {I aIa (1)
I bAd (2)
I c (3)
A cBd (4)
A aAd (5)
B dAf }. (6)
На першому кроці заносимо до списку нетермінальний символ І, тому що права частина правила (3) не містить нетермінальних символів. На другому кроці, згідно з правилом (1), до списку потрібно б було занести нетермінальний символ І, але він там уже є. Тому наш список залишається без змін. Згідно з кроком три список не поповнюється, тому виявляється, що в заданій граматиці непродуктивними є символи А і B. Після виключення правил, які містять непродуктивні символи, одержуємо граматику:
R' = {I a I a, (1)
I c}. (2)
11.1.2. Визначення недосяжних символів. У КВ-граматиці Г називається недосяжним символ X Vт Va, якщо X не з'являється в жодному виведеному ланцюжку.
Розглядаючи правила граматики, можна помітити, що, якщо нетермінальний символ у лівій частині правила є досяжним, то і всі символи правої частини є досяжними. Ця властивість правил є основою процедури виявлення недосяжних символів, яку можна описати так:
1. Створити одноелементний список, що складається з початкового символу граматики І.
2. Якщо знайдено правило, ліва частина якого вже є в списку, то включити до списку всі символи, які містяться в його правій частині.
3. Якщо на кроці 2 нові нетермінальні символи в список більше не додаються, то отримано список усіх досяжних нетермінальних символів, а решта нетермінальних символів, які не потрапили в список, є недосяжними.
Приклад. Маємо граматику
Г11.2: R = {I a I b (1)
I c (2)
A bI (3)
A a}. (4)
На першому кроці до списку заносимо нетермінальний символ І. На другому кроці, згідно з правилом (2), потрібно додати до списку нетермінальний символ І, але він там уже є. Більше нетермінальних символів додати до списку ми не можемо. Отже, A є недосяжним символом.
КВ-граматика називається приведеною, якщо вона не містить зайвих (непродуктивних і недосяжних) символів.