巴科斯范式

巴科斯范式（，縮寫為 ），又称为巴科斯-诺尔范式（，縮寫同樣為 ，也譯为巴科斯-瑙尔范式、巴克斯-诺尔范式），是一种用于表示上下文无关文法的语言，上下文无关文法描述了一类形式语言。它是由约翰·巴科斯（John Backus）和彼得·诺尔（Peter Naur）首先引入的用来描述计算机语言语法的符号集。

尽管巴科斯范式也能表示一部分自然语言的语法，它还是更广泛地使用于程序设计语言、指令集、通信协议的语法表示中。大多数程序设计语言或者形式语义方面的教科书都采用巴科斯范式。在各种文献中还存在巴科斯范式的一些变体，如扩展巴科斯范式 EBNF 或扩充巴科斯范式 ABNF。

發展歷史
約翰·巴科斯首次在ALGOL 58中-{zh-tw:實作出;zh-cn:实现}-巴科斯範式。彼得·諾爾在ALGOL 60之中，進一步發展它的概念並將它的符號加以簡化，稱其為巴科斯範式（Backus Normal Form）。但高德納主張應稱為巴科斯-諾爾範式（Backus–Naur Form），因為它不算是一種正規形式（Normal form）。

介绍 
BNF 规定是推导规则(产生式)的集合，写为：

<符號> ::= <使用符號的表達式>

这里的 <符号> 是非终结符，而表达式由一个符号序列，或用指示选择的竖杠 '|' 分隔的多个符号序列构成，每个符号序列整体都是左端的符号的一种可能的替代。从未在左端出现的符号叫做终结符。

参见 
 八篇书（使用数学结构的梵语文法）
 扩充巴科斯范式（ABNF）
 扩展巴科斯范式（EBNF）
 GOLD BNF分析器
 GNU bison GNU版本的Yacc
 正则表达式
 Wirth语法表示法1977提出的对BNF的一个替代者 
 Yacc分析器生成器（与Lex预处理器一起使用）
 ANTLR用Java写的另一个分析器生成器
 上下文有关文法
 形式文法
 分析表达式文法
 随机上下文无关文法

引用

外部链接 
 Algol-60 BNF, the original BNF.
 Sample grammars at the BNF Web club.
   contains a posting on news:comp.compilers that explains some of the history of the two names (Backus-Naur form vs. Backus normal form).
 Article BNF and EBNF: What are they and how do they work?  by Lars Marius Garshol.
 RFC 4234 Augmented BNF for Syntax Specifications: ABNF
 Comparision of different variants of BNF
 Syntax diagram of EBNF
 Generation of syntax diagrams from EBNF

B