Позначення

Оновлено: 28.04.2023

В описах лексичного аналізу та синтаксису використовується модифікована нотація граматики BNF. Тут використовується такий стиль визначення:

name      ::=  lc_letter (lc_letter | "_")*
lc_letter ::=  "a"..."z"

Перший рядок говорить, що name є lc_letter, за яким слідує послідовність нуля або більше lc_letterі підкреслення. lc_letter, у свою чергу, є будь-яким із окремих символів 'a' до 'z'. (Це правило фактично дотримується для імен, визначених у лексичних і граматичних правилах у цьому документі.)

Кожне правило починається з назви (яка є назвою, визначеною правилом) і ::=. Вертикальна риска (|) використовується для розділення альтернатив; це найменш обов’язковий оператор у цій нотації. Зірочка (*) означає нуль або більше повторень попереднього елемента; аналогічно, плюс (+) означає одне або більше повторень, а фраза, взята в квадратні дужки ([ ]), означає нуль або одне повторення (іншими словами, фраза всередині є необов’язковою). Оператори * і + прив’язуються якомога тісніше; дужки використовуються для групування. Літеральні рядки беруться в лапки. Пробіл має значення лише для розділення токенів. Зазвичай правила містяться в одному рядку; правила з багатьма альтернативами можуть бути відформатовані альтернативно, коли кожен рядок після першого починається з вертикальної смуги.

У лексичних визначеннях (як у прикладі вище) використовуються ще дві конвенції: два літеральні символи, розділені трьома крапками, означають вибір будь-якого окремого символу в заданому (включно) діапазоні символів ASCII. Фраза в кутових дужках (<...>) дає неформальний опис визначеного символу; наприклад, це можна використовувати для опису поняття «керуючий характер», якщо це необхідно.

Незважаючи на те, що використана нотація майже однакова, існує велика різниця між значенням лексичних і синтаксичних визначень: лексичне визначення працює з окремими символами джерела вхідних даних, тоді як визначення синтаксису працює з потоком лексем, згенерованих лексичний аналіз. Усі використання BNF у наступному розділі («Лексичний аналіз») є лексичними визначеннями; використання в наступних розділах є синтаксичними визначеннями.