- •М. С. Нікітченко теорія програмування Частина 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.7.5. Скінченні автомати
Скінченні автомати можна розглядати як обмежені машини Тьюрінга, що мають одну вхідну стрічку – голівка може тільки читати символи і рухатися тільки в один бік. Тому такі автомати не мають необмеженої пам’яті. Екстенсіональне визначення наступне.
Визначення 4.30. Скінченний автомат – це п’ятірка M =(Q, A, , q0, F), де
Q – скінченна множина станів,
A – скінченний вхідний алфавіт (QA=),
– скінченне відношення переходів (скінченне відображення :QAQ),
q 0 – початковий стан із Q,
F – підмножина фінальних (заключних) станів із Q.
Всі основні загальні (інтенсіональні) поняття визначаються подібно до того, як це було зроблено для машин Тьюрінга та магазинних автоматів, тому тут їх наводити не будемо.
Основним є наступний результат.
Теорема 4.7. За кожним скінченним автоматом можна побудувати еквівалентну йому породжуючу граматику типу 3 (ліволінійну чи праволінійну граматику), і навпаки, за кожною породжуючою граматикою типу 3 можна побудувати еквівалентний їй скінченний автомат.
Відзначимо, що детермінованість чи недетермінованість скінченного автомату не впливає на клас мов, що сприймаються автоматами.
Теорія скінченних автоматів розроблена досить детально, для них побудовані алгоритми еквівалентних перетворень, мінімізації та ін. Тут наведемо лише один результат, що стосується алгебраїчного подання скінченно-автоматних мов. Такі мови ще називаються регулярними мовами.
Регулярні мови задаються виразами (термами) регулярної алгебри мов, що має операції об’єднання, конкатенації та ітерації.
Регулярні вирази можна визначити індуктивно.
Базис складається з трьох визначень.
Константи ε та Ø є регулярними виразами.
Якщо a – довільний символ алфавіту, то a – регулярний вираз. Зауважимо, що часто в написанні розрізняють символ алфавіту та відповідний вираз. Тут це не робимо, щоб не ускладнювати текст.
Якщо X – змінна, то X – регулярний вираз.
Крок індуктивної побудови. Індуктивний крок складається з чотирьох визначень, по одному для трьох операторів та для введення дужок.
Якщо E та F – регулярні вирази, то E+F – регулярний вираз.
Якщо E та F – регулярні вирази, то EF – регулярний вираз. Зауважимо, що для позначення оператора конкатенації – як операції над мовами, так і оператора в регулярному виразі – можна використовувати крапку.
Якщо Е – регулярний вираз, то Е* – регулярний вираз.
Якщо Е – регулярний вираз, то (Е) – регулярний вираз.
Інтерпретація L виразів у класі мов над алфавітом A задається також індуктивно на підставі інтерпретації змінних LV: Var 2A*, де Var – множина змінних.
Інтерпретація базових виразів задається таким чином:
L(ε) = {ε} і L(Ø) = Ø.
L(a) = {a}.
L(X) = LV(X).
Інтерпретація складних виразів задається таким чином (E та F – регулярні вирази):
L(E+F) = L(E) L(F).
L(EF) = L(E)L(F).
L(E*) = (L(E))* .
L((E)) = L(E).
Ми використовуємо L(E) для позначення мови, яка відповідає Е. Як і в інших алгебрах, оператори регулярних виразів мають певні пріоритети, тобто оператори зв’язуються зі своїми операндами в певному порядку.
Найвищий пріоритет має оператор ітерації *. Далі йде оператор конкатенації. Оскільки він асоціативний, то не має значення, в якому порядку групуються послідовні конкатенації. Але, якщо необхідно групувати вирази, то робимо це, починаючи зліва. Найнижчий пріоритет має оператор об’єднання. Він також асоціативний. Для нього будемо притримуватися групування, починаючи з лівого краю виразу.
Основний результат стосовно регулярних мов є наступний.
Теорема 4.8. За кожним скінченним автоматом можна побудувати еквівалентний йому регулярний вираз, і навпаки, за кожним регулярним виразом можна побудувати еквівалентний йому скінченний автомат.
Наведений результат дозволяє використовувати різні формалізми (граматики типу 3, скінченні автомати, регулярні вирази) для дослідження властивостей регулярних мов. Такі мови мають гарні властивості замкненості (відносно об’єднань, перетину, доповнень, конкатенації, ітерації та деяких інших операцій). Ще одну важливу групу властивостей регулярних мов становлять «властивості розв’язності». За їх допомогою можна з’ясувати, чи визначають два різні автомати одну і ту саму мову. Розв’язність цієї задачі дозволяє мінімізувати автомати, тобто за даним автоматом знайти еквівалентний йому з найменшою можливою кількістю станів. Задача мінімізації має велике значення при проектуванні інтегральних схем.