Backus-Naur Form(BNF,巴科斯-瑙尔范式)是一种用于描述上下文无关文法(Context-Free Grammar,CFG)的形式化元符号约定。它是由约翰·巴科斯(John Backus)和彼得·瑙尔(Peter Naur)于1960年代提出的。

BNF 的主要目的是提供一种简洁而清晰地表示语法规则的方法,特别是用于描述编程语言的语法。它通常用于编译器设计和其他领域,其中对语法的准确描述至关重要。

BNF 规则的基本结构如下:

  1. 语法规则(Production Rule): 一个语法规则由一个非终结符(左侧)和一个用来表示它的产生式(右侧)组成。产生式描述了如何用终结符和/或非终结符组成一个语法结构。 例如,下面是一个简单的 BNF 规则:
    <expression> ::= <term> '+' <expression>
                 | <term>
    
    这个规则表示一个表达式可以由一个项(<term>)后面跟着一个加号和另一个表达式组成,或者只是一个项。
  2. 非终结符和终结符: 非终结符是语法结构的占位符,而终结符是实际的语法单元。非终结符用尖括号括起来,而终结符则直接写出来。 例如,<expression><term> 是非终结符,而 + 是终结符。

BNF 的简洁性和易读性使其成为广泛用于描述编程语言语法、通信协议和其他形式的文法规则的标准工具。在实践中,通常还会使用扩展或变体,如扩展巴科斯-瑙尔范式(Extended Backus-Naur Form,EBNF)。

顺带一提,BFN正是这三位大佬的研究成果:

三个图灵奖得主,BNF范式(左边两位),右边那位扩展了BNF,变成了[E]BNF 图灵奖得主