Warning: session_name(): Cannot change session name when session is active in /home/stalko/rodina-ru.com/docs/dokuwiki/inc/init.php on line 231

Warning: session_set_cookie_params(): Cannot change session cookie parameters when session is active in /home/stalko/rodina-ru.com/docs/dokuwiki/inc/init.php on line 232
======Форма Бэкуса — Наура====== **Форма Бэкуса — Наура** (сокр. **БНФ**, **[[бэкус-джон|Бэкуса]] — [[наур-питер|Наура]] форма**) — [[формальная-система|формальная система]] описания [[синтаксис|синтаксиса]], в которой одни [[синтаксическая-категория|синтаксические категории]] последовательно определяются через другие категории. БНФ используется для описания [[контекстно-свободная-грамматика|контекстно-свободных]] [[формальная-грамматика|формальных грамматик]]. Существует [[расширенная-форма-бэкуса-наура|расширенная форма Бэкуса — Наура]], отличающаяся лишь более ёмкими конструкциями. Используется для описания [[синтаксис|синтаксиса]] языков программирования, данных, протоколов (например, в документах [[rfc|RFC]]) и т. д. (причём как грамматики, так и регулярной лексики, поскольку [[регулярная-грамматика|регулярные грамматики]] являются подмножеством [[контекстно-свободная-грамматика|контекстно-свободных]]). =====Описание===== //Терминология этой статьи может расходиться с традиционной.// БНФ-конструкция определяет конечное число символов ([[нетерминал|нетерминалов]]). Кроме того, она определяет правила замены символа на какую-то последовательность букв (терминалов) и символов. Процесс получения цепочки букв можно определить поэтапно: изначально имеется один символ (символы обычно заключаются в угловые скобки, а их название не несёт никакой информации). Затем этот символ заменяется на некоторую последовательность букв и символов, согласно одному из правил. Затем процесс повторяется (на каждом шаге один из символов заменяется на последовательность, согласно правилу). В конце концов, получается цепочка, состоящая из букв и не содержащая символов. Это означает, что полученная цепочка может быть выведена из начального символа. БНФ-конструкция состоит из нескольких предложений вида <определяемый символ> ::= <посл.1> | <посл.2> | . . . | <посл.n> , описывающих правила. Такое правило означает, что символ ''<определяемый символ>'' может заменяться на одну из последовательностей <посл.i>. Знак определения обычно выглядит как ''::='' или ''→'', но возможны и другие варианты. Некоторые специальные символы, как например ''<пусто>'', означают какую-то последовательность (в данном случае — пустую). =====Примеры конструкций===== * Вот пример БНФ-конструкции, описывающей правильные скобочные последовательности: <правпосл>::=<пусто> | (<правпосл>) | <правпосл><правпосл> Это простая конструкция, состоящая всего из одного правила, утверждающего, что символ ''<правпосл>'' может замениться либо на пустое место, либо на этот же символ <правпосл>, заключённый в скобки, либо на два символа ''<правпосл>'' идущих подряд. Описание оператора ''if'' языка PASCAL в БНФ: <условный оператор if> ::= if <булево выражение> then <оператор> [else <оператор>] <булево выражение> ::= "NOT" <булево выражение> | <булево выражение> <логическая операция> <булево выражение> | <выражение> <операция сравнения> <выражение> <логическая операция> ::= "OR" | "AND" <выражение> ::= <переменная> | <строка> | <символ> <операция сравнения> ::= "=" | "<" | ">" … {{tag>"Формальные языки" Метамоделирование}}