168大数据

标题: ABNF(巴克斯范式)语法总结--根据RFC5234 [打印本页]

作者: 乔帮主    时间: 2014-12-4 11:42
标题: ABNF(巴克斯范式)语法总结--根据RFC5234
ABNF是各类RFC中经常遇到的数据定义语法,在此把他的语法简单做个总结,所有内容均参照RFC5234的内容和结构。

1 规则定义

rule = definition ;comment
    一条语句以回车换行结束。其中rule为规则名,大小写不敏感;definition为规则的具体定义; ';'后作为注释


2 定义字符
语法:%<进制><具体数字>
<进制>有二进制,十进制,十六进制,分别表示为b,d,x;
例子:      CR=%d13
                CR=%x0D
也可以用空格或'.'连接多个字符:
                rulename    =  %d97 %d98 %d99
等价于     rulename    =  %d97.98.99
最终效果相当于"abc"


3. 定义字符串
字符串用双引号包括。
         command     =  "command string"
注意:字符串内的字符都是大小写不敏感的,所以如需要特别注明大小写,需要用上一条单独定义字符。


4. 各类操作符
(a) rule=rule1 rule2; 规则相加

         foo         =  %x61           ; a
         bar         =  %x62           ; b
         mumble      =  foo bar foo    ;mumble最终效果aba

(b) rule=rule1/rule2; 规则多选一

         mumble=foo/bar ; mumble可以等于foo或bar
         在实际使用中,'/'经常用'|'代替;

(c) rule1=/rule2; 相当于rule1=rule1/rule2;

(d) 用'-'定义多选范围
         DIGIT       =  %x30-39
         等价于DIGIT       =  %x30 / %x31 / %x32 / %x33 / %x34 / %x35 / %x36 /%x37 / %x38 / %x39

(e) 用()组合规则,在()内的规则。对()外的规则来说,()内的规则被当作单独的规则对待。
         (foo / bar) blat
         效果相当于 foo blat / bar blat

(f) 多次重复规则
    语法稍复杂,完整定义为<a>*<b>element,表示最少重复a次,最多重复b次element规则
    如<a>略去,表示最小0次;如<b>略去,表示做多无限次;如<a><b>都略去,表示最小0次,最多无限次。
         1*3CHAR ;表示最少1个,最多3个CHAR
         *3CHAR  ;最少0个,最多3个CHAR
         *CHAR   ;没有或任意多个CHAR

(g) 指定重复次数规则
    语法格式:n<element>,表示n次重复element规则
    如   4CHAR   ;表示CHAR重复4次

(h) 用[]表示可选规则
    语法[rule]
    如   mumble= foo [bar]; bar可选,mumble可以是foo或foobar

  操作符的优先级顺序(从高到低排列):
      规则名, 字符串或字符
      注释  ;
      多选范围  -
      多次重复或指定重复 * 或n<element>
      组合规则(), 可选规则[]
      规则相加: rule1 rule2
      多选一规则: /








欢迎光临 168大数据 (http://www.bi168.cn/) Powered by Discuz! X3.2