扩展的巴科斯范式(Augmented Backus–Naur Form)
来源:互联网 发布:吡拉西坦 知乎 编辑:程序博客网 时间:2024/06/07 09:34
1 引言(introduction)
ABNF(Augmented Backus-Naur Form) 是一种基于BNF(Backus-Naur Form)的元语言(metalanguate),在RFC2234中对其进行了语法(syntax)定义,并且被RFC文档广泛使用,用来描述互联网协议。
ABNF和标准的BNF之间的区别主要是:引入了命名规则(naming rules)、repetition、alternatives、order-independence和value ranges。
2 规则定义(rule definition)
2.1 规则名称 -- Rule Name.
规则名称的命名规则由字母、数字和连字符(hyphens)组成,必须以字母开头。规则名称不区分大小写(case-insensitive),因此,规则名<rulename>、<Rulename>、<RULENAME>和<rUlENAMe>都指向同一个规则。
不同于最初的BNF,尖括号(“<
”,“>
”)包围规则名并不是必需的。但是,最好是用尖括号与规则名称一起出现,因为这样会更加容易识别规则名称。通常情况下,尖括号应用于规则名,或者与字符串绑定(字符串内不能有空格)用于识别部分规则,例如后续段落即将介绍的repetition (5.6 variable repetition)。
2.2 规则格式 -- Rule Form.
规则的定义如下:
rulename = elements crlf
等号的左边rulename表示规则名,等号的右边表示规则的定义,规则的定义一般由规则序列(elements)、行结束标志(<crlf>)组成。
2.3 终结符值--Terminal Values.
终结符值有时也叫字符,一串终结符值的组合即为规则。终结符由一个或者多个数字字符说明,这些数字字符代表的含义由其它字符给出,可以参见ASCII码表。数字字符表示方式可以为十进制%d、二进制%b、十六进制%x.
因此,
'a' = %d97
'a' = %x61
'a' = %b1100001
分别表示的US-ASCII表内a的十进制、十六进制和二进制表示。
'b' = %d98
'b' = %x62
'b' = %b1100010
用'.'可以实现连续串值的压缩表示。
例如:
ab = %d97.98
行结束标志与终结符值并不是一回事,可以用终结符值(CL CR)表示行结束标志。
在ABNF中,可以用双引号表示文字串,例如,"print abc"表示文字串print abc,忽略字符串内的magic字符,例如,%d在双引号内仅代表串"%d"。
文字串不区分大小写,所以,
rulename = "abc"
和"aBc","aBc","ABc"等相匹配。
加入只想匹配abc,应该写成如下的格式:
rulename = %d97 %d98 %d99 或者
rulename = %d97.98.99
2.4 外部编码 -- External Encodings
本文主要讨论的是基于7位的us-ascii编码格式。3 操作符(operators)
3.1 连接 --concatenaation
Rule = Rule1 Rule2例如,为了匹配字符串"aba",首先应该定义以下两种规则:
fu = %x61; a
bar = %x62; b
然后定义匹配"aba"的规则:
mumble = fu bar fu
3.2 选择 -- Alternative
Rule = Rule1 / Rule2由斜杠("/")分割的元素是可选的。
3.3 扩充选择 -- Incremental alternatives
Rule =/ Rule1将Rule1附加到Rule.
eg.
rule = alt1 / alt2
rule =/ alt3
rule =/ alt4 / alt5
-->rule = alt1 / alt2 / alt3 / alt4 / alt5
3.4 值域选择 -- Value Range Alternatives
可以使用连字符("-")表明可选值的域,表达更加简洁。eg.
DIGIT = %x30-39
DIGIT = "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9"
note:字符"0" 的ascii码为%x30
3.5 序列组 -- Sequence Group
在括号内出现的内容必须作为单一的element,并且内容出现的顺序也是严格要求的。eg.
elem (foo / bar) blat
匹配的内容为(elem foo blat)或者(elem bar blat).
建议尽可能的使用括号,避免歧义.
eg.
elem foo / elem bar
匹配(elem foo)或者(elem bar)
建议写成:(elem foo) / (elem bar)
3.6 不定循环 -- variable Repetition
在element前面出现的操作符"*"表示循环。完整的表示形式为:<a>*<b>element
<a> 和 <b> 为可选的十进制数,表示元素至少出现<a>次,至多<b>次。
<a>的默认值为0。<b>的默认值为无穷大。
*element 0-->无穷大
1*element 1-->无穷大
3*3element 3次
1*2element 1-->2次
3.7 指定出现的次数 -- Specific Repetition
规则的表现形式:<n>element
等价于
<n>*<n>element
因此,2DIGIT表示2位数的数字,3ALPHA表示三个字母的字符串。
DIGIT和ALPHA代表的含义见附录.
3.8 可选序列 -- Optional Sequence
用方括号表征可选序列:[foo bar]
等价于
*1(foo bar)
0*1(foo bar)
3.9 注释 -- comment
从分号";"开始到一行的结束都代表注释.3.10 操作符的优先级 -- operator Precedence
Strings,Names formationcomment
Value range
Repetition
Grouping,Optional
Concatenation
Alternative
需要注意的事项:
随意混用选择操作符和连接操作符,会引起混淆。
推荐使用分组操作符明确区分具有相互关系的组。
4. 用ABNF定义ABNF(ABNF DEFINITION OF ABNF)
下述语法中使用的规则详见附录A。
rulelist = 1*( rule / (*c-wsp c-nl) ) rule = rulename defined-as elements c-nl ; continues if next line starts ; with white space rulename = ALPHA *(ALPHA / DIGIT / "-") defined-as = *c-wsp ("=" / "=/") *c-wsp ; basic rules definition and ; incremental alternatives elements = alternation *c-wsp c-wsp = WSP / (c-nl WSP) c-nl = comment / CRLF ; comment or newline comment = ";" *(WSP / VCHAR) CRLF alternation = concatenation *(*c-wsp "/" *c-wsp concatenation) concatenation = repetition *(1*c-wsp repetition) repetition = [repeat] element repeat = 1*DIGIT / (*DIGIT "*" *DIGIT) element = rulename / group / option / char-val / num-val / prose-val group = "(" *c-wsp alternation *c-wsp ")" option = "[" *c-wsp alternation *c-wsp "]" char-val = DQUOTE *(%x20-21 / %x23-7E) DQUOTE ; quoted string of SP and VCHAR without DQUOTE num-val = "%" (bin-val / dec-val / hex-val) bin-val = "b" 1*BIT [ 1*("." 1*BIT) / ("-" 1*BIT) ] ; series of concatenated bit values ; or single ONEOF range dec-val = "d" 1*DIGIT [ 1*("." 1*DIGIT) / ("-" 1*DIGIT) ] hex-val = "x" 1*HEXDIG [ 1*("." 1*HEXDIG) / ("-" 1*HEXDIG) ] prose-val = "<" *(%x20-3D / %x3F-7E) ">" ; bracketed string of SP and VCHAR without angles ; prose description, to be used as last resort
5 安全相关(security consideration)
本文档与安全无关。
6 附录A-核心 (appendix A - core)
6.1 核心规则 -- core rules
本附录提供了方便的具体语法的核心。
定义可作为一套核心规则。
BIT = "0" / "1"
CHAR = %x01-7F ;us-ascii中的任意一个字符.除了NUL之外.
CR = %x0D ;carriage return
CRLF = CR LF ;以太网标准的换行
CTL = %x00-1F / %7F ;控制字符
DIGIT = %x30-39 ;0-9
DQUOTE = %0x22 ;双引号
HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
HTAB = %x09 ;tab键
LF = %x0A ; 换行 linefeed
LWSP = *(WSP / CRLF WSP) ;linear white spate(past newline)
OCTET = %x00-FF ;8 bits of data
SP = %x20 ;空格
WSP = SP / HTAB
6.2 常用编码 -- common encoding
另外,数据被表示为“网络虚拟ASCII”,即在8bit的字段中,使用7位bitUS-ASCII,最高位为0。字符串在网络字节序中表现为:高字节在左边(big endian),并且最先通过网络发送。(可参见网络字节序相关文档)。
7. 参考文献(reference)
[US-ASCII] Coded Character Set--7-Bit American Standard Code for Information Interchange, ANSI X3.4-1986. [RFC733] Crocker, D., Vittal, J., Pogran, K., and D. Henderson, "Standard for the Format of ARPA Network Text Message," RFC 733, November 1977. [RFC822] Crocker, D., "Standard for the Format of ARPA Internet Text Messages", STD 11, RFC 822, August 1982.
8 联系(contact)
David H. Crocker Paul Overell Internet Mail Consortium Demon Internet Ltd 675 Spruce Dr. Dorking Business Park Sunnyvale, CA 94086 USA Dorking Surrey, RH4 1HN UK Phone: +1 408 246 8253 Fax: +1 408 249 6205 EMail: dcrocker@imc.org paulo@turnpike.com
说明:本人水平有限,错误难免,欢迎指正。另外原文献目录的第七段(ACKNOWLEDGMENTS)没有翻译,敬请谅解。
原文链接:
http://www.ietf.org/rfc/rfc2234.txt
- 扩展的巴科斯范式(Augmented Backus–Naur Form)
- Backus–Naur Form(巴科斯范式)
- 巴科斯范式(BNF: Backus-Naur Form)
- 巴科斯范式BNF: Backus-Naur Form介绍
- Backus–Naur Form
- 闲聊Backus Naur Form--巴科斯-诺尔(BNF范式)
- 类C语言的 BNF(backus-Naur Form)文法
- 学习巴克斯范式BNF(Backus Naur Form)读懂SAP HANA语法
- The syntax of C in Backus-Naur form
- 什么是BNF EBNF 巴科斯范式及其扩展 BNF & Augmented BNF
- 什么是BNF范式,什么又是EBNF范式? 巴科斯范式及其扩展 BNF & Augmented BNF
- BOOST::SPIRIT 什么是BNF范式,什么又是EBNF范式? 巴科斯范式及其扩展 BNF & Augmented BNF
- 语法规范的扩展巴科斯范式:ABNF
- RFC2234-扩展的巴科斯范式(ABNF)
- 巴科斯范式及其扩展
- 扩展巴科斯范式
- 扩展巴科斯范式(EBNF)
- 巴科斯范式及其扩展(BNF)
- Embedded Linux Primer----嵌入式Linux基础教程--2.3.5~8节--存储注意事项
- 简单循环语句总结
- 如何突破路由器(TPLINK等)的IP带宽控制(限速)
- 关于4.2的ActionBar高度
- java之流
- 扩展的巴科斯范式(Augmented Backus–Naur Form)
- 字典树的详解与实现
- C#里自定义事件详解
- SIP for android
- 使用VMware安装OS X 10.8 Mountain Lion (多图/零基础/保证成功安装)
- hibernate使用group by,having实现统计功能
- LeetCode:Restore IP Addresses
- MFC单文档多视图
- Guice框架