浅谈巴科斯范式

巴科斯范式(Backus Normal Form, BNF),是一种用于表示上下文无关文法的语言。

它常被用于描述计算机语言语法。

规则如下:

  • 被定义的语法结构,使用 <> 包裹,可以被继续展开,称为非终结符。
  • 构成实际文本的符号,例如 "if" , "else" 不能被继续展开,称为终结符。
  • 使用 ::= 定义语法。
  • 使用 | 表示可能的分支。

下面是一个简单的例子:

<integer> ::= <digit> | <integer> <digit>
<digit>   ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"

根据规则,42 就是一个合法的 <integer> 因为它可以被拆分为 <integer> -> <integer> <digit> -> <digit> <digit> -> "4" "2"

在它的基础上,又衍生出了 EBNF 和 ABNF 两种变种。

ABNF 是网络协议领域的专门化变种。

而 EBNF 是 BNF 的现代化,实用化升级,提供了一些 BNF 所没有的语法糖。

因此除非明确涉及网络通信领域,否则就使用 EBNF 就好。

EBNF 新增的语法糖如下:

  • [] 内部的内容可出现零或一次。如: "if" <expr> <block> ["else" <block>]
  • {} 内部的内容可重复零或多次。如:<Int> ::= <digit> | <Int> {<digit>}
  • () 内部的内容被视为同一个组。如:("+" | "-") <Int>

浅谈巴科斯范式
http://www.inksha.com/archives/qian-tan-ba-ke-si-fan-shi
作者
inksha
发布于
2025年10月10日
许可协议