简单说明增广BNF

        增广BNF(augmented BNF)包括下面的结构:要解释的名词=名词解释(name = definition)

        1、规则的名字(name)
就是它本身(不带任何尖括号,"<",">"),后面跟个等号=,然后就是该规则的定义。如果规则需要用多个行来描述,利用空格进行缩进格式排版。某些基本的规则使用大写,如SP, LWS, HT, CRLF, DIGIT, ALPHA,等等。定义中还可以使用尖括号来帮助理解规则名的使用。

        2、字面意思("literal")
文字的字面意思放在引号中间,若无特别指定,则该段文字是大小写敏感的。

        3、规则1|规则2(rule1 | rule2)
 "|"表示其分隔的元素是可选的,比如,"是|否"要选择‘是’或‘否’。

        4、(规则1 规则2)((rule1 rule2))
在圆括号中的元素表明必然出现。如(元素1(元素2|元素3)元素4)可表明两种意思,即"元素1 元素2 元素4"和"元素1 元素3 元素4" 

        5、*规则(*rule)
在元素前加星号"*"表示循环,其完整形式是"<n>*<m>元素",表明元素最少产生<n>次,最多<m>次。缺省值是0到无限,例如,"1*元素"意思是至少有一个,而"1*2元素"表明允许有1个或2个。

        6、[规则]([rule])
方括号内是可选元素。如"[元素1 元素2]"与"*1(元素1 元素2)"是一回事。

        7、N 规则(N rule)
表明循环的次数:"<n>(元素)"就是"<n>*<n>(元素)",也就是精确指出<n>取值。因而,2DIGIT 就是2位数字, 3ALPHA  就是由三个字母组成字符串。

        8、#规则(#rule)
"#"与"*"类似,用于定义元素列表。完整形式是"<n>#<m>元素"表示至少有<n>个至多有<m>个元素,中间用","或任意数量的空格(LWS)来分隔,这将使列表非常方便,如"(*LWS 元素*( *LWS "," *LWS 元素  ))"就等同于"1#元素"。空元素在结构中可被任意使用,但不参与元素个数的计数。也就是说,"(元素1),,(元素2)"仅表示2个元素。但在结构中,应至少有一个非空的元素存在。缺省值是0到无限,即"#(元素)"表示可取任何数值,包括0;而"1#元素"表示至少有1个;而"1#2元素"表示有
1个或2个。

        9、;注释(; comment)
分号后面是注释,仅在单行使用。

        10、隐含*LWS(implied *LWS)

本文的语法描述是基于单词的。除非另有指定,否则线性空格(LWS)可以在两个邻近符号或分隔符(tspecials)之间任意使用,而不会对整句的意思造成影响。在两个符号之间必须有至少一个分隔符,因为它们也要做为单独的符号来解释。实际上,应用程序在产生HTTP结构时,应当试图遵照"通常方式",因为现在的确有些实现方式在通常方式下无法正常工作。

参考资料:
1、BNF

你可能感兴趣的:(简单说明增广BNF)