浅谈巴科斯范式
巴科斯范式(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