ПАСКАЛЬ: МОВА ТА МЕТАМОВА
<список імен> ::= <ім'я>{','<ім'я>}.Означення змінних у Паскаль-програмі складається з довільного числа списків змінних, за якими після двокрапки записано ім'я типу та ';'. Списків з іменами типів може взагалі не бути. Будь-якому зі списків може передувати слово var (перед першим воно обов'язкове). Це слово відокремлюється від імені хоча б одним пропуском. Якщо обмежитися типами integer та real, то синтаксис означення змінних можна задати РБНФ
<означення змінних> ::= [ 'var '<список імен> ':' <ім'я типу> ';'
{ ['var ']<список імен>':'<ім'я типу>';' }
]
<ім'я типу> ::= 'integer' | 'boolean'
Оператори мови Паскаль, на відміну від означень, не закінчуються роздільником ';', і синтаксис непорожньої послідовності операторів задається РБНФ
<послід. операторів> ::= <оператор> {';' <оператор>}
Приклад 5. Розглянемо вирази з цілими сталими, в яких можуть бути виклики одномісної функції odd. Виразом є ціла стала, а також:
1.вираз у дужках,
2.два вирази й знак бінарної операції між ними,
3.вираз із знаком унарної операції на початку,
4.виклик функції odd із виразом у дужках.
Ці неформальні, але однозначні правила легко перекладаються на мову БНФ. Нехай
|
(уточнення інших нетерміналів залишається читачеві, ).
4. Синтаксичні діаграми
Мова форм Бекуса-Наура – не єдина метамова для описання структури конструкцій мов програмування. Досить поширеною є також метамова синтаксичних діаграм.
В основі цієї метамови також лежать нетермінальні й термінальні символи. Але тут вони записуються у прямокутниках та колах (овалах) відповідно. Наприклад, нетермінали та <оператор> позначаються так:
Відповідно термінальні символи '(' та else мають вигляд
Порядок символів у метавиразах задається стрілками, наприклад: