BNF被用来形式化定义语言的语法,以使其规则没有歧义。(如C、Java、ASN.1都可以通过BNF进行描述)事实上,BNF非常精确,围绕这些语法有很多数学理论,使得人们竟然可以机械地为基于BNF语法的语言构造解析器。(有些语法不能实现,但通常可以手工地通过转换成其他形式来实现)。实现这个功能的程序叫做编译器,最有名的是YACC,当然,还有很多很多。
http://en.wikipedia.org/wiki/Augmented_Backus%E2%80%93Naur_Form
巴科斯范式(BNF: Backus-Naur Form 的缩写)是由 John Backus 和 Peter Naur 首先引入的用来描述计算机语言语法的符号集。现在,几乎每一位新编程语言书籍的作者都使用巴科斯范式来定义编程语言的语法规则。
rfc4234 Augmented BNF for Syntax Specifications: ABNF (老版本为rfc2234)
RFC2234 定义了扩展的巴科斯范式(ABNF)。近年来在Internet的定义中ABNF被广泛使用。ABNF做了更多的改进。扩充巴科斯-瑙尔范式(ABNF)基于了巴科斯-瑙尔范式(BNF),但由它自己的语法和推导规则构成。这种元语言的发起原则是描述作为通信协议(双向规范)的语言的形式系统。它建档于 RFC 4234 中通常充当 IETF 通信协议的定义语言。
ABNF:
rule = definition ; comment CR LF
1. rule不需要用尖括号括起来,与BNF不同
2. 不区分大小写
3. 如果期望明确定义,则使用%d97代表a
4. 终结符就是可以直接出现在语言中的符号,非终结符就是语言中某些抽象的概念。
5. '::=' 意味着必须被替换