Введение
Формализм для описания языков программирования
В информатике форма Бэкуса — Наура (Backus–Naur form, BNF или нормальная форма Бэкуса) — это обозначение, используемое для описания синтаксиса языков программирования или других формальных языков. Она была разработана Джоном Бэкусом и Питером Науром. BNF можно описать как метасинтаксическое обозначение для контекстно-свободных грамматик. Форма Бэкуса — Наура применяется везде, где требуется точное описание языков, например, в официальных спецификациях языка, руководствах и учебниках по теории языков программирования. BNF может использоваться для описания форматов документов, наборов команд и протоколов связи. Со временем было создано множество расширений и вариантов оригинального обозначения Бэкуса — Наура; некоторые из них чётко определены, включая расширенную форму Бэкуса — Наура (EBNF) и дополненную форму Бэкуса — Наура (ABNF).
Другие
Многие спецификации BNF, которые можно найти в Интернете сегодня, предназначены для удобства чтения и не являются формальными. Они часто включают в себя множество следующих правил и расширений синтаксиса: необязательные элементы заключаются в квадратные скобки: [<item x>]. Элементы, встречающиеся 0 или более раз, заключаются в фигурные скобки или снабжаются символом звездочки (*), например, <word> ::= <letter> {<letter>} или <word> ::= <letter> <letter>* соответственно. Элементы, встречающиеся 1 или более раз, снабжаются символом плюс (+), например, <word> ::= <letter>+. Терминалы могут быть выделены жирным шрифтом вместо курсива, а нетерминалы – обычным текстом вместо угловых скобок. Сгруппированные элементы заключаются в круглые скобки.
Optional items enclosed in square brackets: [<item x>]. Items existing 0 or more times are enclosed in curly brackets or suffixed with an asterisk (*) such as <word> ::= <letter> {<letter>} or <word> ::= <letter> <letter>* respectively. Items existing 1 or more times are suffixed with an addition (plus) symbol, +, such as <word> ::= <letter>+. Terminals may appear in bold rather than italics, and non terminals in plain text rather than angle brackets. Where items are grouped, they are enclosed in simple parentheses.
Языковые грамматики
, первоначальный BNF. , свободно распространяемые грамматики BNF для SQL. , свободно распространяемые грамматики BNF для SQL, Ada, Java. , свободно распространяемые грамматики BNF/EBNF для C/C++, Pascal, COBOL, Ada 95, PL/I. Включает части 11, 14 и 21 стандарта ISO 10303 (STEP).