Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Бичков - Основи сучасного програмування.doc
Скачиваний:
69
Добавлен:
07.03.2016
Размер:
2.67 Mб
Скачать

Завдання для самостійної роботи

1. Навести визначення алгоритму.

2. Навести властивості алгоритму.

3. Навести класифікацію внутрішніх структур алгоритму.

4. Що таке складність задачі, алгоритму?

5. Навести тези Тьюрінга, Колмогорова.

6. Як обчислювати складність задачі, алгоритму?

2

Форма Бекуса – Наура

Основи сучасного програмування Основи сучасного програмування Основи сучасного програмування Основи сучасного програмування Основи сучасного програмування Основи сучасного

Великої уваги потребують проблеми формалізації опису синтаксису мови програмування. Вдалий формалізм дозволяє не тільки описувати мови, але й спрощувати роботу зі створення компіляторів.

Мова, що використовується для формалізації синтаксису іншої мови, називається метамовою. Її граматика містить правила виведень, що визначають синтаксис мови, або, іншими словами, допустимі компоненти й конструкції ланцюжків мови. Для задання правил використовуються різні форми опису: символічна, форма Бекуса – Наура (БНФ), ітераційна й синтаксичні діаграми.

При розгляді загальних властивостей граматик зазвичай застосовують символічну форму задання правил. Вона використовує як елементи нетермінального словника окремі символи та стрілки у вигляді роздільників правої й лівої частин правила.

При описі синтаксису конкретних мов програмування доводиться вводити велику кількість нетермінальних символів, тому символічна форма запису втрачає свою наочність.

У теперішній час найуживанішою для опису синтаксису мов програмування є метамова БНФ. Ідея цієї метамови полягає у структуруванні понять вихідної мови програмування й визначенні складніших понять через простіші. Будь-яке поняття зображується своїм найменуванням у кутових дужках: . Речення БНФ є одним визначенням деякого поняття через інші у формі

поняття, знак"::=", після якого записується визначення поняття

У складі визначення можуть використовуватися інші поняття, сим­воли алфавіту, ключові слова мови програмування, а також спеціальні символи мови БНФ, що мають визначений сенс. Як такі символи використовуються вертикальна риска й круглі, квадратні та фігурні дужки. Їхнє використання підкоряється правилам:

 запис <поняття1>::<поняття2><поняття3> і т. д. означає, що перше поняття є послідовним записом інших понять;

 запис <поняття1>::=<поняття2>|<поняття3>| і т. д. означає, що пер­ше поняття збігається з одним з інших;

 круглі дужки використовуються для групування складних кон­струкцій БНФ усередині простих (допоміжний інструмент, можна не використовувати);

 узяття у квадратні дужки частини визначення свідчить про необов'язковість цієї частини;

 узяття у фігурні дужки частини визначення свідчить про те, що ця частина може бути повторена довільну кількість разів (або не повторюватись жодного разу);

 замість складного поняття до БНФ можуть входити термінальні символи й ключові слова.

Наведемо кілька прикладів.

1. Непорожній список, що складається із довільної кількості елементів, розділених комами, описується як

<список>::=<елемент списку>{,<елемент списку>}

2. Якщо список може бути порожнім, то його опис виглядатиме як

<список>::=|<елемент списку>{,<елемент списку>}

3. Ідентифікатор – це послідовність літер і цифр, що починається з літери

<ідентифікатор>::=<літера>{<літера>|<цифра>}

Більшість символів у мовах програмування потрапляють в один із таких класів:

 ідентифікатори;

 службові слова (які є підмножиною ідентифікаторів);

 цілі числа;

 однолітерні роздільники (+, – (,), / і т. д.);

 дволітерні роздільники (//, /*, **, : = і т. д.).

Ці символи можна описати простими правилами:

<ідентифікатор>::=<літера>|<ідентифікатор>

<літера>|<ідентифікатор><цифра>

<ціле>::=<цифра>|<ціле><цифра>

<роздільник>::=+|–|(|)|/|...

<роздільник>::=<SLASH>/|<SLASH>*|<AST>*|<COLON>=

<SLASH>::=/

<AST>::=*

<COLON>::=: