Синтаксис Pascal-програми
НАПИС ПРОГРАМ НА МОВІ CF-PASCAL
У цьому розділі ми дізнаємося про те, як писати прості програми мовою CF-Pascal, перевіряти коректність синтаксису та використовувати принципи проектування та розробки програм у процесі покрокового вдосконалення написання, виконання та тестування найпростіших програм.
Введення в синтаксис мови CF-Pascal
Програми CFPascal складаються відповідно до чітко заданого синтаксису. Точний набір правил визначає синтаксис програм та процедури його перевірки.
Нові ідеї: Синтаксис програми, нотація BNF, синтаксичне правило, альтернативне синтаксичне правило, рекурсивне синтаксичне правило, доказ синтаксичної коректності.
Для того, щоб навчитися писати англійською, в першу чергу необхідно освоїти синтаксис та граматику мови, щоб бути здатним писати складні речення, об'єднувати їх у параграфи тощо. Синтаксис англійської мови вимагає багатьох років вивчення, тому що він є природною мовою і постійно оновлюється і змінюється.
Аналогічно, для того, щоб писати на CF-Pascal, теж необхідно опанувати синтаксис, щоб бути здатним писати оператори та складати з їх використанням програми. Однак CF-Pascal є формальною мовою із чітко заданим набором синтаксичних правил. Ці правила дозволяють вивчити синтаксис мови набагато швидше та повніше, ніж це можливо у разі природних мов. Вивчивши синтаксис мови, можна сміливо переходити до питання, як писати програми на вирішення майбутніх завдань.
Паскаль-машина розглядає Паскаль-програму як послідовність символів. Люди, у свою чергу, дізнаються знайомі слова і можуть здогадатися, що мають на увазі наступну послідовність символів,Паскаль-програмою, що не є:
PROGRAM CopyChar (INPUT, OUTPUT);
Паскаль-програма з таким самим ім'ям, яка була розглянута на попередній лекції, виглядає так:
PROGRAM CopyChar (INPUT, OUTPUT);
Різниця між цими рядками символів в один символ не дозволить компілятору мови Паскаль відкомпілювати перший приклад.
Через необхідність складання Паскаль-програм з точністю до символу, цей розділ ознайомить вас із суворими правилами синтаксису мови CF-Pascal. Звичайно, експерименти та приклади корисні під час вивчення, але точні та лаконічні правила дозволять вам впевнено перевіряти коректність програм. Вивчення мов програмування лише за прикладами та використання компілятора для перевірки синтаксису призведе не лише до обмеженого використання ЯП, але також створить неправильне розуміння написання програм взагалі.
Синтаксис Pascal-програми
Синтаксичні елементи можуть бути описані за правилами граматики в нотації BNF (Backus-Naur Form), названої на ім'я комп'ютерних учених, які разом з іншими вченими брали участь у розробці мови ALGOL-60 – концептуального попередника мови Паскаль. Синтаксичні елементи записуються у вигляді слова або фрази всередині кутових дужок ( ) і визначаються за допомогою правила, яке може ставитись до інших синтаксичних елементів.
Правило 1 визначається частина синтаксичного елемента "програма".
SR1. ::=; .
Синтаксичне правило 1 стверджує, що синтаксичний елемент може бути складений з синтаксичного елемента, наступної за неюточки з комою, синтаксичного елемента та наступноїточки. Кутові дужки, що містять назви інших синтаксичних елементів, означають, що коженіз цих елементів також визначаються синтаксичним правилом. Правило 1 визначає елемент , тоді як і буде визначено за допомогою інших правил. Крапка з комою та крапка – це синтаксичні літерали або рядки символів, які повинні бути присутніми саме в тому вигляді, в якому вони показані.
Символ::= означає «є будь-яким прикладом ». Синтаксичне правило 1 читається так:
є будь-яким прикладом , наступноїточки з комою, наступного ,наступноїточки.
відповідає синтаксичної частини , а послідовність:
відповідає синтаксичної частини.
Для того, щоб вся програма відповідала синтаксичній частині, треба вставити крапку з комою після заголовка і точку після частини, як це зазначено в синтаксичному правилі 1. Ми говоритимемо про елементи програм, говорячи про те, яка послідовність символів якому синтаксичному елементу відповідає, і потім буде посилатися до цієї послідовності символів на ім'я елемента.
Синтаксичне правило 2 визначає синтаксичний елемент.
SR2. ::= PROGRAM (INPUT, OUTPUT)
Заголовок починається з символьної послідовностіPROGRAM, наступного та символьного рядка(INPUT, OUTPUT). У програмі CopyChar є послідовність самих символівCopyChar.
Стандартні слова на кшталтPROGRAM і повинні бути розділені один від одного як мінімум одним пропуском, у тому випадку, коли між ними не знаходиться розділовий знак на кшталтточки з комою. У синтаксичних правилах прогалини ніколи не показуються. Прогалини використовуються в них тільки для того, щоб підвищити їх читальність. У тих випадках, коли може бути вставлена одна прогалина, може бути використана будь-яка їх кількість пробілів.Символ кінця рядка може замінити будь-який пробіл.
є будь-яка послідовність символів, яка починається з літери, за якою може йти будь-яка (0 або більше) кількість літер та/або цифр, без пробілів та інших символів.
Синтаксичне правило 3 визначає визначення ідентифікатора, використовуючи два нових поняття. По-перше – це вертикальна риса яка означає «або ». По-друге, це правило використовує у визначенні синтаксичного елемента той самий синтаксичний елемент. Вертикальна характеристика – це інший метасимвол, у цих синтаксичних правилах.
SR3. ::=
Це правило читається так:
є , або (інший) , за яким слідує , або (інший) , за яким слідує .
Кожен можливий варіант у такому правилі називаєтьсяальтернативою правила. У тому випадку, коли нам потрібно буде послатися на одну з альтернатив, ми будемо користуватися нотацією Dewey. Наприклад, правило SR3 має першу альтернативу 3.1 ( ) і дві інші альтернативи 3.2 і 3.3. Коротше кажучи, синтаксичне правило SR3 свідчить, що будь-яка буква або цифра, додана в кінець, створює новий . Правило 3.1 визначає як єдину букву, а правила 3.2 та 3.3 визначають довжиною більше одного символу у термінах меншої довжини.
SR4. <>
SR5. := 0 1 2 3 4 5 6 7 8 9
Альтернатива 4.7, наприклад, дозволяє бути рівною (наприклад) рівноюG.
Тепер, використовуючи ці визначення, ми можемо побудувати CopyChar по одному символу за раз:
| За синтаксичним правилом | |
| C | З є за правилом4.3 і, отже, за правилом 3.1 |
| Co | З як описано вище, o є за правилом 4.41, тому Co є ідентифікатором за правилом 3.2 |
| Cop | Подібним чином, як у випадку з Co, Cop є ідентифікатором за правилами 4.42 та 3.2 |
| … | |
| CopyChar | подібно до CopyCha і правил 1.44 і 3.2 |
Подібним чином, послідовності символів Copy1, XxXxX, One4Two є .
Оскільки прогалини зустрічаються в синтаксичних правилах тільки для покращення читання, вони не можуть зустрічатися всередині
Чому нижче наведені символьні рядки не є ідентифікаторами?
| Послідовність символів | Не є тому, що |
| 2nd | не починається з літери |
| C 75 | містить пробіл |
| Ch1+Ch2 | символ + не є ні літерою, ні цифрою |
Синтаксичні дерева
Правила синтаксису мови CF-Pascal визначають покрокову побудову будь-якої програми у вигляді послідовності символів. Якщо така побудова програми неможлива, символьна послідовність не може бути текстом Паскаль-програми. Побудова програми може бути зображена у вигляді синтаксичного дерева. Намалюнку 1 частково побудована CopyChar.