Форма Бэкуса — Наура

Материал из Seo Wiki - Поисковая Оптимизация и Программирование

Перейти к: навигация, поиск

Форма Бэкуса—Наура (сокр. БНФ, БэкусаНаура форма) — формальная система описания синтаксиса, в которой одни синтаксические категории последовательно определяются через другие категории. БНФ используется для описания контекстно-свободных формальных грамматик.

Содержание

Применение

Используется для описания синтаксиса языков программирования, данных, протоколов (например, в документах RFC) и т. д. (причем как грамматики, так и регулярной лексики, поскольку регулярные грамматики являются подмножеством контекстно-свободных).

Описание

Терминология этой статьи может расходиться с традиционной.

БНФ-конструкция определяет конечное число символов (нетерминалов). Кроме того, она определяет правила замены символа на какую-то последовательность букв (терминалов) и символов. Процесс получения цепочки букв, можно определить поэтапно: изначально имеется один символ (символы обычно заключаются в угловые скобки, а их название не несёт никакой информации). Затем этот символ заменяется на некоторую последовательность букв и символов, согласно одному из правил. Затем процесс повторяется (на каждом шаге один из символов заменяется на последовательность, согласно правилу). В конце концов, получается цепочка, состоящая из букв (и не содержащая символов). Это означает, что полученная цепочка может быть выведена из начального символа.

БНФ-конструкция состоит из нескольких предложений вида

 <определяемый символ> ::= <посл.1> | <посл.2> | . . . | <посл.n>

, описывающих правила. Такое правило, означает, что символ <определяемый символ> может заменяться на одну из последовательностей посл.1. Знак определения, обычно выглядит как ::=, но возможны и другие варианты.

Некоторые специальные символы, как например <пусто> означают какую-то последовательность (в данном случае — пустую).

Примеры конструкций

  • Вот пример БНФ-конструкции, описывающей правильные скобочные последовательности:
 <правпосл>::=<пусто> | (<правпосл>) | <правпосл><правпосл>

Это простая конструкция, состоящая всего из одного правила, утверждающего, что символ <правпосл> может замениться либо на пустое место, либо на этот же символ <правпосл>, заключённый в скобки, либо на два символа <правпосл> идущих подряд.

Вот, как получить с помощью этой конструкции цепочку ((())())() (ниже перечисляются все этапы, символы <пусто> опускаются):

<правпосл>
<правпосл><правпосл>
(<правпосл>)<правпосл>
(<правпосл>)(<правпосл>)
(<правпосл>)(<пусто>)
(<правпосл><правпосл>)()
((<правпосл>)<правпосл>)()
((<правпосл>)(<правпосл>))() 
((<правпосл>)(<пусто>))() 
(((<правпосл>))())() 
(((<пусто>))())() 
((())())()

См. также

<span id="interwiki-de-ga" />ca:Forma de Backus i Naur cs:Backus-Naurova forma da:BNF de:Backus-Naur-Form en:Backus–Naur Form es:Notación de Backus-Naur fi:Backus–Naur-muoto fr:Forme de Backus-Naur gl:Backus-Naur Form hr:Backus-Naurov oblik hu:Backus–Naur forma is:BNF it:Backus-Naur Form ja:バッカス・ナウア記法 ka:ბეკუს-ნაურის ფორმალიზმი ko:바쿠스-나우르 표기법 ms:Bentuk Backus–Naur nl:Backus-Naur-formalisme pl:Notacja BNF pt:Formalismo de Backus-Naur sr:Бекус-Наурова форма sv:Backus-Naur-form ta:பேக்கசு-நார் முறை tr:Backus-Naur form uk:Нотація Бекуса-Наура zh:巴科斯范式

Личные инструменты

Served in 0.141 secs.