- •Розділ 7 Основи теорії кодування План викладення матеріалу
- •7.1. Алфавітне й рівномірне кодування
- •7.2. Достатні умови однозначності декодування. Властивості роздільних кодів
- •7.3. Оптимальне кодування
- •7.4. Коди, стійкі до перешкод. Коди Хемінга
- •8.2. Алгебри булевих функцій
- •8.3. Спеціальні форми зображення булевих функцій в алгебрах Буля і Жегалкіна
- •8.3.1. Диз'юнктивні нормальні форми
- •8.3.2. Кон'юнктивні нормальні форми
- •8.3.3. Поліном Жегалкіна
- •8.4. Повнота і замкненість
- •8.4.1. Функціонально повні системи
- •8.4.2. Замкнені класи
- •8.4.4. Послаблена функціональна повнота
- •8.4.5. Передповні класи
- •8.5. Мінімізація булевих функцій
- •8.5.1. Основні результати
- •8.5.2. Методи побудови скороченої днф
- •8.5.3. Побудова тупикових днф
- •8.5.4. Властивості скороченої днф
- •8.5.5.Метод карт Карно побудови мінімальних днф
- •8.6. Реалізація булевих функцій схемами з функціональних елементів
- •Комп'ютерні проекти
- •Література
- •9.2. Формальні породжувальні граматики
- •9.3. Типи граматик (ієрархія Хомські)
- •9.4. Дерева виведення
- •9.5. Форми Бекуса-Наура
- •9.6. Скінченні автомати з виходом
- •9.7. Скінченні автомати без виходу
- •9.8. Подання мов
- •Комп'ютерні проекти
- •Література
- •Розділ 10
- •План викладення матеріалу
- •10.1. Основні вимоги до алгоритмів
- •10.2. Машини Тьюрінга
- •10.3. Обчислення числових функцій на машинах Тьюрінга
9.4. Дерева виведення
Виведення в мовах, породжених контекстно вільними граматиками, можна зображати графічно з використанням кореневих дерев. У такому разі ці дерева називають деревами виведення, або деревами синтаксичного розбору.
Кореню дерева виведення відповідає початковий символ, внутрішнім вершинам - нетермінальні символи, що зустрічаються у виведенні, листкам - термінальні символи. Нехай γ - ланцюжок і А→𝛾 - продукція, використана у виведенні. Тоді вершина, яка відповідає нетермінальному символу А, має синами вершини, які відповідають кожному символу ланцюжка γ у порядку зліва направо.
Приклад 9.14.Визначимо, чи належить ланцюжок сbаb мові, породженій граматикоюG=(V,T,S,P), деV={а, b, с, А, В, С, S}, Т={ а, b, с},S — початковий символ, а множина продукцій
.
Розв'язати цю задачу можна двома способами.
Розбір зверху вниз.
Оскільки є лише одна продукція з початковим символом Sу лівій частині, то виведення починаємо з S⇒АВ. Далі використаємо продукціюА→Са. Отже, маємоS⇒АВ⇒СаВ.
Оскільки сbаb починається з символів сb, то використаємо продукціюС→сb, це дастьS⇒АВ⇒СаВ⇒сbаВ.
Завершуємо виведення використанням продукціїВ→Ь:
Отже, ланцюжок сbаb належить мовіL(G).
Розбір знизу вверх.
Починаємо з ланцюжка, який потрібно вивести: сbаb. Можна використати продукціюС→сb, отже,Саb⇒сbаb.
Далі застосуємо продукціюА→Са, тоді матимемо Аb⇒Саb⇒сbаb. З використанням продукції В→b, отримаємо АВ⇒Аb⇒Саb⇒сbаb. Нарешті, використаємо продукціюS→АВ:
Дерево виведення для рядка сbаb у граматиціG зображено на рис. 9.3. ▲
Виведення називають еквівалентними, якщо вони мають однакові дерева. Отже, в прикладі 9.14 наведені еквівалентні виведення. Перевагою дерева виведення порівняно з виведенням є компактність. Дерево на рис. 9.3 має вісім вершин, тоді як виведення - 18 або 16 символів.
Взаємно однозначної відповідності між ланцюжками даної мови L та деревами виведення в граматиці G, яка породжує L, може і не бути. Контекстно вільну граматикуG називають неоднозначною, якщо існує хоча б один ланцюжок в L(G), який має в L понад одне дерево виведення.
Приклад 9.15. Розглянемо граматику, яку отримують з граматики прикладу 9.13 ототожненням усіх нетермінальних символів і вилученням усіх тривіальних правилякі в цьому разівиникнуть. У результаті отримаємо граматику з такою множиною правил Р:
S→S, S→S+S, S→S-S, S→S*S, S→S/S, S→(S),S→a,S→b, S→c.
Ця граматика еквівалентна до граматики прикладу 9.13; окрім того, виведення в ній суттєво коротші, а дерева мають суттєво меншу висоту. Проте ця граматика неоднозначна. Вираз а*b+с маєів ній два дерева виведення (рис 9.4, а та б). ▲
Рис. 9.4
Неоднозначність мови є незручністю в разі її використання. Річ у тому, що дерево виведення є головним засобом для інтерпретації ланцюжка; тому синтаксична неоднозначність (тобто наявність декількох дерев виведення) ланцюжка тягне за собою його семантичну неоднозначність - наявність різних інтерпретацій. Наприклад, для ланцюжка а*b+с з прикладу 9.15 різні дерева виведення інтерпретуються як різні способи розставлення дужок: (а*b)+с у першому випадку і а*(b+с) у другому. Це зумовлює різну послідовність операцій і, відповідно, різні результати обчислень. Зазначимо, що явне введення дужок після кожної неодномісної операції у мовах формул (логічних, арифметичних, алгебричних тощо) є достатнім засобом для забезпечення однозначності. Граматика з дужками (див. приклад 9.13) хоча й призводить до інадлишкових дужок у формулах, однак дає змогу зменшити кількість нетермінальних символів і тим спростити синтаксичну структуру формули, що визначається її деревом.