
- •М. С. Нікітченко теорія програмування Частина 1
- •1. Формалізація простої мови програмування
- •1.1. Неформальний опис простої мови програмування
- •1.2. Формальний опис синтаксису мови sipl
- •1.3. Формальний опис семантики мови sipl
- •1.3.2. Функції
- •1.3.3. Композиції
- •1.3.4. Програмні алгебри
- •1.3.5. Визначення семантичних термів
- •1.3.6. Побудова семантичного терму програми
- •1.3.7. Обчислення значень семантичних термів
- •1.3.8. Загальна схема формалізації мови sipl
- •1.4. Властивості програмної алгебри
- •2. Розвиток основних понять програмування
- •2.1. Аналіз словникових визначень поняття програми
- •2.2. Розвиток поняття програми з гносеологічної точки зору
- •2.3. Розвиток основних понять програмування
- •2.3.1 Початкова тріада понять програмування
- •2.3.2. Тріада прагматичності програм
- •2.3.3. Тріада основних понять програмування
- •2.3.4. Пентада основних понять програмування
- •2.4. Розвиток основних програмних понять
- •2.4.1. Тріада основних програмних понять
- •Малюнок 2.7. Програма як діалектичне заперечення проблеми
- •2.4.2. Пентада основних програмних понять
- •2.5. Сутнісні та семіотичні аспекти програм
- •2.6. Програми і мови
- •2.7. Пентада програмних понять процесного типу
- •3. Формалізація програмних понять
- •3.1. Теоретико-функціональна формалізація
- •3.2. Класи функцій
- •3.3. Програмні системи
- •3.4. Рівні конкретизації програмних систем
- •4. Синтактика: формальні мови та граматики
- •4.1. Розвиток понять формальної мови та породжуючої граматики
- •4.2. Визначення основних понять формальних мов
- •4.3. Операції над формальними мовами
- •4.4. Породжуючі граматики
- •4.5. Приклад породжуючої граматики та її властивості
- •4.6. Ієрархія граматик Хомського
- •4.7. Автоматні формалізми сприйняття мов
- •4.7.1. Машини Тьюрінга
- •4.7.2. Еквівалентність машин Тьюрінга та породжуючих граматик
- •4.7.3. Лінійно-обмежені автомати
- •4.7.4. Магазинні автомати
- •4.7.5. Скінченні автомати
- •4.8. Методи подання синтаксису мов програмування
- •4.8.1. Нормальні форми Бекуса–Наура
- •4.8.2. Модифіковані нормальні форми Бекуса–Наура
- •4.8.3. Синтаксичні діаграми
- •4.9. Властивості контекстно-вільних граматик
- •4.9.1. Видалення несуттєвих символів
- •4.9.2. Видалення -правил
- •4.9.3. Нормальна форма Хомського
- •4.9.4. Нормальна форма Грейбах
- •4.9.5. Рекурсивні нетермінали
- •4.10. Властивості контекстно-вільних мов
- •4.11. Операції над формальними мовами
- •4.12. Дерева виводу
- •4.13. Однозначні та неоднозначні граматики
- •4.14. Розв’язні та нерозв’язні проблеми кв-граматик та мов
- •4.15. Рівняння в алгебрах формальних мов
- •5. Теорія рекурсії (теорія найменшої нерухомої точки)
- •5.1. Рекурсивні визначення та рекурсивні рівняння
- •5.2. Частково впорядковані множини, границі ланцюгів та -області
- •5.3. Неперервні відображення
- •5.4. Теореми про нерухомі точки
- •5.5. Конструювання похідних -областей
- •5.6 Властивості оператора найменшої нерухомої точки
- •5.7. Застосування теорії ннт
- •5.7.1. Уточнення синтаксису мов програмування
- •5.7.2. Семантика мов програмування
- •5.7.3. Рекурсивні розширення мови sipl
4.2. Визначення основних понять формальних мов
Визначення 4.1. Алфавітом називають скінченну непорожню множину символів (літер). Позначатимемо алфавіт знаком Σ.
Приклад 4.1. Найчастіше використовуються наступні алфавіти:
Σ = {0,1} – бінарний чи двійковий алфавіт;
Σ = {a , b … z} – множина літер англійського алфавіту.
Визначення 4.2. Ланцюжком, чи інколи словом, реченням, рядком, в алфавіті Σ називають скінченну послідовність символів з Σ.
Приклад 4.2 Послідовність 01101 – це ланцюжок у бінарному алфавіті Σ = {0,1}. Ланцюжок 111 також є ланцюжком у цьому алфавіті.
Визначення 4.3. Порожній ланцюжок – це ланцюжок, який не містить жодного символу. Цей ланцюжок позначається ε. Його можна розглядати як ланцюжок у довільному алфавіті.
Визначення 4.4. Довжина слова (послідовності) w позначається |w|; якщо Σ Σ, то довжина послідовності, утвореної з w видаленням тих символів, що не належать Σ, позначається |w|Σ; якщо a Σ, то |w|a означає |w|{a} і задає кількість входжень символу a в w.
Приклад 4.3. Для ланцюжка abcbacaacccb маємо:
|abcbacaacccb| = 12, |abcbacaacccb|{a, c}= 9, |abcbacaacccb|c=5.
Визначення 4.5. Якщо w та u – ланцюжки в алфавіті Σ, то ланцюжок wu (результат дописування слова u в кінець слова w) називається конкатенацією (катенацією, зчепленням) слів w та u. Іноді конкатенацію слів позначають wu.
Визначення
4.6. Якщо
w
– ланцюжок в алфавіті Σ,
то ланцюжок
називається n-ю
степенню
w
і позначається w n.
За визначенням, w 0=.
Приклад 4.4. a3=aaa, a2b3c=aabbbc,
(abcbacaacccb)2= abcbacaacccbabcbacaacccb.
Визначення 4.7. Множина всіх ланцюжків в алфавіті Σ позначається Σ* і називається вільною напівгрупою, породженою Σ. Множина всіх непорожніх ланцюжків позначається Σ+.
Приклад 4.5. Якщо Σ ={a}, то Σ*={, a, aa, aaa, …}, Σ+={a, aa, aaa, …}.
Термін «вільна напівгрупа» веде своє походження з алгебри. Напівгрупою називається множина з асоціативною бінарною операцією. Якщо така множина має одиничний елемент, то її називають моноїдом. Напівгрупа вільна, якщо ніяких інших співвідношень (крім асоціативності) немає. В теорії формальних мов часто вважають, що напівгрупа має одиничний елемент. Множину Σ* можна розглядати як вільну напівгрупу з одиницею. Конкатенація є асоціативною операцією, а порожній ланцюжок є одиницею, тому що для довільного ланцюжка w маємо w = w= w. Такий розгляд множини ланцюжків Σ* дозволяє перейти до більш багатої структури напівгрупи та використати алгебраїчні властивості для дослідження цієї множини. Іншою обставиною є те, що подаючи множину послідовностей у вигляді напігрупи, ми ототожнюємо символ з послідовністю довжини 1, що складається з цього символу. Тому замість двохосновної моделі (алфавіт та множина послідовностей), яка розрізняє символи та послідовності, розглядається лише одна основа – множина ланцюжків. Це спрощує дослідження.
Визначення 4.8. Ланцюжок t є підланцюжком ланцюжка w, якщо w=utv для деяких ланцюжків u та v.
Нарешті, введемо поняття формальної мови.
Визначення
4.9.
Якщо
,
то
називається формальною
мовою
(або просто мовою) над алфавітом
(в
алфавіті
).
Приклад 4.6. Множина ланцюжків {anbncn | n0} = {, abc, a2b2c2, a3b3c3,…} є формальною мовою над алфавітом {a, b, c}.
Зауважимо, якщо L є мовою над Σ, то можна стверджувати, що L – це мова над будь-яким алфавітом Σ, що містить Σ. Інакше кажучи, є певна консервативність поняття мови до розширення алфавіту. Крім того, є монотонність множини мов відносно розширення алфавіту, бо це веде до збільшення множини мов.