ПАСКАЛЬ: МОВА ТА МЕТАМОВА
Зміст метасимволів "{", "}" означимо за допомогою такого прикладу.
Приклад 3. Ім'я, або ідентифікатор, у мовах програмування – це послідовність букв і цифр, що починається з букви. Нехай буквами є лише A, B, C, цифрами – 0 і 1. Ідентифікаторами в цьому алфавіті є, наприклад, A, B1, BC, C1CAAB0 тощо. Означимо сукупність БНФ, що задає їх синтаксис.
Розглядаючи поняття "ідентифікатор", можна ввести поняття "послідовність букв і цифр, можливо, порожня". Позначимо ці два поняття відповідно нетерміналами <Ід> і <ПБЦ>. Введемо також поняття "буква" й "цифра" (нетермінали <Б> і <Ц>). Послідовність букв і цифр або порожня, або починається буквою або цифрою, за якою записано послідовність букв і цифр. Іншими словами,
<Ід> ::= <Б><ПБЦ>
<Б> ::= 'A' | 'B' | 'C'
<Ц> ::= '0' | '1'
<ПБЦ> ::= <> | (<Б> | <Ц>) <ПБЦ>.
Узагальнимо букви й цифри поняттям "символ", додавши правило <символ> ::= <Б> | <Ц>. Тоді <ПБЦ> можна задати двома правилами:
<ПБЦ> ::= <> | <символ> <ПБЦ>.
За допомогою цих правил із нетермінала <ПБЦ> виводяться всі можливі послідовності символів:
<>, <символ>, <символ><символ>, … ,
і тільки вони. Позначимо множину послідовностей, складених із <символ>, метавиразом {<символ>} із новими метасимволами "{", "}". Вважатимемо, що всі послідовності символів вивідні з цього метавиразу. Отже, правило
<ПБЦ> ::= {<символ>}
за нашим означенням є еквівалентним правилам
<ПБЦ> ::= <> | <символ> <ПБЦ>.
Взагалі, якщо X – довільний метавираз, то метавираз {X} позначає всі послідовності (у тому числі порожню) виразів, вивідних із X.
Дужки {} називаються ітераційними. З їх використанням поняття ідентифікатора з останнього прикладу можна задати так:
<Ід> ::=<Б> { <Б> | <Ц> }
<Б> ::= 'A' | 'B' | 'C'
<Ц> ::= '0' | '1'
або навіть так:
<Ід> ::=( 'A' | 'B' | 'C' ){ 'A' | 'B' | 'C' | '0' | '1' }.
Приклад 4. У мовах програмування широко використовується поняття "список імен, розділених комами". Структуру таких списків можна задати РБНФ