Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BNF.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
95.74 Кб
Скачать

Контрольні запитання

1.

Чому вирази та інструкції в мовах програмування є рекурсивними об’єктами?

2.

Чи є рекурсивними об’єктами виклики функцій у мові С++?

3.

Чи є рекурсивними об’єктами функції мови С++?

4.

У чому полягає рекурсивність форм Бекуса-Наура?

5.

Чи можна вважати поняття послідовності букв і цифр рекурсивним?

Вправи

1.

Написати БНФ або РБНФ для понять:

  1. “двійкова константа” — це або '0', або послідовність із '0' і '1', яка починається з '1';

  1. “дійсна константа”.

2.

Написати РБНФ із метасимволами { та }, еквівалентну:

  1. <A>::='c' | <A>'b';

  1. <A>::='c' | 'b'<A>.

3.*

Нехай S позначає інструкцію розгалуження, A — інструкцію присвоювання, C — умову, а синтаксис інструкцій задається такою РБНФ.

S ::= A | if '(' C ')' S [ else S ]

Скількома способами з S можна вивести таку послідовність символів?

if (C) if (C) A else A

4.

Написати систему БНФ або РБНФ для понять:

  1. інструкція оголошення імені константи;

  1. оголошення параметрів функції;

  1. заголовок функції;

  1. виклик функції;

  1. означення функції;

  1. інструкція switch.

Загальні поняття (ім’я, інструкція та вираз) можна не розкривати. Обмежитися іменами стандартних скалярних типів мови С++ в якості можливих виразів, які задають тип.

Вправи для допитливих

5.*

Чи можна написати систему РБНФ, еквівалентну <A> ::= 'c' | '('<A>')', так, щоб праворуч від “::=” не було нетерміналів?

1 Для простоти викладу нехтуємо знаками на початку арифметичних констант, а також іменуючими виразами в лівій частині виразу присвоювання, більш загальними ніж імена.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]