BNF范式(BNF: Backus-Naur Form 的缩写)即巴科斯范式, 是由 John Backus 和 Peter Naur 首先引入的用来描述计算机语言语法的符号集.

现在, 几乎每一位新编程语言书籍的作者都使用巴科斯范式来定义编程语言的语法规则.

BNF范式中的每个标准语法都具有以下结构:

name ::= expansion

其中 ::== 符号表示为 “可扩展为” 或 “可替换为”, “可定义为”.

在某些文本中, name 也称为非终止符, 一般为语言中某些抽象的概念.

从未在左端出现的符号叫做终结符,之所以叫做终结符是因为没有针对他们的书写规范,他们是书写过程的终止(符号通常被叫做非终止符,也有人叫非终端)

规则如下:

  • {}:包含可重复0至无数次的项
  • []:可选项
  • <>:必选项,尖括号括起来的是非终结符
  • ():表示分组
  • |:表示在其左右两边任选一项,相当于"OR"的意思

例如下面这个man apt-get的信息.

 apt-get [-asqdyfmubV] [-o=config_string] [-c=config_file] [-t=target_release] [-a=architecture] {update |
               upgrade | dselect-upgrade | dist-upgrade | install pkg [{=pkg_version_number | /target_release}]...
               | remove pkg...  | purge pkg...  | source pkg [{=pkg_version_number | /target_release}]...  |
               build-dep pkg [{=pkg_version_number | /target_release}]...  |
               download pkg [{=pkg_version_number | /target_release}]...  | check | clean | autoclean | autoremove |
               {-v | --version} | {-h | --help}}

我很好奇