- •1.2. Алгоритм
- •1.3. Предмет науки програмування
- •1.4. Застосування мов програмування
- •1.5. Стандартизація мов програмування
- •1.6. Середовище розробки
- •1.7. Тестування і верифікація програм
- •Лекція 2. Алгоритми і обчислення
- •2.1. Алгоритми
- •2.2. Обчислювальні машини
- •2.3. Основи фон-нейманівської архітектури
- •Лекція 3. Парадигми програмування
- •3.1. Базові парадигми програмування
- •Процедурне програмування
- •Абстрактна семантика процедурних програм.
- •Денотаційна семантика.
- •Операційна семантика
- •Структурність і модульність
- •3. 3. Модульне програмування
- •3.4. Об’єктно-орієнтовне програмування
- •3.5. Функціональне програмування
- •3.6. Логічне програмування
- •3.6. Алгебраїчна парадигма
- •Висновок
- •Лекція 4. Огляд основних мов програмування
- •4.1. Мова Picmkalkul Конрада Цузе
- •4.1.1. Історичні передумови
- •4.1.2. Огляд мови
- •4.2. Мінімальне програмування на апаратному рівні: псевдокоди
- •4.2.1. Мова Short Code
- •4.2.2. Система Speedcoding
- •4.2.3. Система "компіляції" univac
- •4.2.4. Суміжна робота
- •4.3. Комп'ютер ibm 704 і мова fortran
- •4.3.1. Історична ретроспектива
- •4.3.2. Процес розробки
- •4.3.3. Огляд мови fortran I
- •4.3.4. Огляд мови fortran II
- •4.3.5. Мови fortran IV, fortran 77 і fortran 90
- •4.4. Функціональне програмування: мова lisp
- •4.4.1. Витоки робіт в області штучного інтелекту та обробка списків
- •4.4.2. Процес розробки мови lisp
- •4.4.3. Огляд мови
- •4.4.5. Два нащадки мови lisp
- •4.4.6. Споріднені мови
- •4.5. Перший крок до удосконалення: мова algol 60
- •4.5.1. Історична ретроспектива
- •4.5.2. Початкова стадія розробки
- •4.5.3. Огляд мови algol 58
- •4.5.4. Прийняття звіту про мову algol 58
- •4.5.5. Процес розробки мови algol 60
- •4.5.6. Огляд мови algol 60
- •4.5.7. Оцінка мови algol 60
- •Лекція 5. Трансляція і формальні граматики
- •5.1. Транслятори
- •5.2. Процес трансляції
- •5.3. Формальні граматики. Нбф-граматика
- •Лекція 6. Java - мова ооп
- •6.2. Основні властивості програм і перші приклади
- •6.3. Арифметичні і побітові оператори мови Java
5.3. Формальні граматики. Нбф-граматика
Граматикою називається формальний опис синтаксису мови програмування.
Граматика визначається набором правил (іноді їх називають правилами підстановки), які визначають побудову із лексем достовірних програм.
Формальна граматика використовує строгу систему позначень. Існують різні типи граматик. НБФ-граматика (граматика Наура-Бэкуса або граматика Бэкуса-Наура - БНФ-граматика) є контекстно-вільною граматикою. Ця граматика використовує НБФ-нотації, запропоновані Джоном Бэкусом в кінці 50-х років для опису синтаксису мови ALGOL.
Проста НБФ-нотація дозволяє описувати всі достовірні конструкції мови програмування, використовуючи наступні символи:
символ ::= має значення "визначається як" і використовується для визначення всіх допустимих значень, синтаксичної одиниці визначення;
символ | має значення "або" і використовується для опису альтернативних варіантів;
пара символів < > обмежує ім’я синтаксичної одиниці, яку називають також не термінальним символом або синтаксичною категорією.
Значення, які стоять поза дужками < >, називаються термінальними символами.
НБФ-граматика складається із набору правил (їх іще називають мета лінгвістичними формулами або продукціями), які записуються за допомогою НБФ-нотації.
Наприклад:
<цифра>::= 0|1|2|3|4|5|6|7|8|9
<цілочисельне значення> ::= цифра | цифра <цілочисельне значення>
Тут символи 0, 1, 2, 3 и т.д. будуть термінальними символами.
При побудові граматики, що описує мову програмування, виділяють початковий не термінальний символ, який визначає конструкцію "програми".
Існують граматики породження і граматики розпізнання. Породжуюча граматика генерує множину ланцюжків термінальних символів із початкового символу, а розпізнаюча граматика використовується для побудови по ланцюжку символів дерева граматичного розбору, яке і приведе до початкового символу.
Можна сказати, що граматика складається із множин термінальних і не термінальних символів, початкового не термінального символу і набору правил. В 1959 році Ноам Хомський запропонував таку класифікацію граматик:
регулярні граматики, які використовуються для побудови лексичних аналізаторів;
контекстно-вільні граматики, використовуються для побудови дерева граматичного розбору. До цього типу відносяться і НБФ-граматики;
контекстно-залежні граматики, задаються набором правил типу x->y, в яких х може бути довільним ланцюжком не термінальних символів, а y – ланцюжком термінальних і не термінальних символів.
граматики з фразовою структурою задаються набором правил типу x->y, в яких х може бути довільним ланцюжком не термінальних символів, а y – ланцюжком термінальних і не термінальних символів (тут не має ніяких обмежень на довжину отримуваних ланцюжків). Більшість таких граматик не мають практичного застосування.
Розширена НБФ-нотація вводить ряд додаткових елементів, які дозволяють значно покращити наглядність представлення правил НБФ-граматики:
необов’язкові елементи обмежуються квадратними дужками;
альтернативні елементи, описані за допомогою символу вертикальної риски, також можуть бути необов’язковими елементами, якщо вони взяті в квадратні дужки;
послідовність декількох однотипних елементів позначається заключенням їх в фігурні дужки, за якими ставиться символ зірочка або плюс({<ціле>}*). Зірочка позначає одне і більше повторення, а плюс – нуль і більше повторень.
