语法规范的扩展巴科斯范式:ABNF( 三 )


因此规则集
ruleset=alt1/alt2
ruleset=/alt3
ruleset=/alt4/alt5
与以下说明相同:
ruleset=alt1/alt2/alt3/alt4/alt5
3.4值域选择 %c##-##
通过使用连字符(“-”)表明可选值域的方式,可以紧缩说明可选数值域 。因此:
DIGIT=%x30-39
等同于:
DIGIT="0"/"1"/"2"/"3"/"4"/"5"/"6"/
"7"/"8"/"9"
连接的数值和数值域不能在同一串中说明 。一个数值可以用点号连接或使用连字符说明
一个值域 。因此,为了在行序列结束之间说明一个可打印的字符,说明格式如下:
char-line=%x0D.0A%x20-7E%x0D.0A
3.5序列组 (Rule1Rule2)
括号里的元素看作一个单一的元素,其内容严格排序 。因而,
(elemfoo)或(barblat)符合要求 。
注重:当选择由多个规则名或文字组成时,强烈建议使用分组符,而不要依靠“空”间
隔的正确阅读 。
因此推荐用如下形式代替上述形式:
(elemfoo)/(barblat)
该形式可以避免粗心读者的误解 。
序列分组符也用于在自由行文中将一个元素序列从行文中分隔出来 。
3.6不定循环 *Rule
在元素前的操作符“*”表示重复 。完整形式为:
*element
此处和是可选的十进制值,表示元素出现至少次,至多次 。
默认值是0和无穷,因此*答应任何数字,包括0;1*需要至少1;
3*3只答应3而1*2答应1或2 。
3.7指定循环 nRule
如下形式的规则:
element
等同于
*element
即,正好出现次 。因而2DIGIT是一个2位数,而3ALPHA是一个3字
母字符串 。
3.8可选序列 [RULE]
方括弧包括了一个可选元素序列:
[foobar]
等同于
*1(foobar).
3.9;注释
分号起始一行注释直到行末 。这是一个简单的方法,用于在说明中平行地包括有用的注
解 。
3.10操作符优先级
上述各种机制具有以下优先级关系,从上到下,优先级依次从高(结合最紧密)到低(结
合最松散):
字符串,名字格式
注释
值域
循环
分组,可选项
连接
选择
随意混用选择操作符与连接操作符,会引起混淆 。
再次提醒,推荐使用分组操作符显式表明连接分组 。
4.扩展巴克斯范式形式的扩展巴克斯范式定义
本语法使用附录A(核心)中提供的规则
rulelist=1*(rule/(*c-wspc-nl))
rule=rulenamedefined-aselementsc-nl
;若下一行以空白字符开头则继续
rulename=ALPHA*(ALPHA/DIGIT/"-")
defined-as=*c-wsp("="/"=/")*c-wsp
;基本规则定义以及增式选择
elements=alternation*c-wsp
c-wsp=WSP/(c-nlWSP)
c-nl=comment/CRLF
;注释或新的一行
comment=";"*(WSP/VCHAR)CRLF
alternation=concatenation
*(*c-wsp"/"*c-wspconcatenation)
concatenation=repetition*(1*c-wsprepetition)
repetition=[repeat]element
repeat=1*DIGIT/(*DIGIT"*"*DIGIT)
element=rulename/group/option/
char-val/num-val/prose-val
group="("*c-wspalternation*c-wsp")"
option="["*c-wspalternation*c-wsp"]"
char-val=DQUOTE*(%x20-21/%x23-7E)DQUOTE
;SP和VCHAR的引用串,不使用DQUOTE
num-val="%"(bin-val/dec-val/hex-val)
bin-val="b"1*BIT
[1*("."1*BIT)/("-"1*BIT)]
;一系列的连续位值或单个ONEOF域
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)">"
;括起来的SP和VCHAR字符串,不含尖括号
;行文描述,作为最后的方法来使用
5.安全考虑
本文档确信与安全无关 。

推荐阅读