ABNF-扩展巴斯克范式
ABNF
ABNF 是一种用于定义互联网规范的语法,它基于 BNF (Backus-Naur Form,巴克斯-瑙尔范式),被称作扩充巴克斯-瑙尔范式。RFC5234 中定义了 ABNF 及它的规则。
ABNF的规则定义
ABNF规则命名
ABNF 的名称就是一系列字符序列,它以字符开始,后接字符,数字或连字符(破折号)。另外,ABNF 名称大小写不敏感,<rulename>,<Rulename>,<RULENAME> 和 <rUleNamE> 指向同一个规则。
ABNF 规则的形式为:
rulename = elements crlf
<rulename> 是规则名称,<elements> 是一个或多个规则列表或终端值,<crlf> 是行结束符。
ABNF的操作符
连接
rule1 rule2
使用空格来连接规则定义中的不同元素,要把空格识别为规则中的分隔符则必须明确指定。
foo = %x61 ; a
bar = %x62 ; b
mumber = foo bar foo
此规则表示小写字符串”aba”。
选择
rule1/rule2
使用反斜杠 ‘/’ 分隔的多个元素来表示多选一规则。
foo / bar
表示可以匹配规则 <foo> 或 <bar>。
增量选择
rule1=/rule2
通过在规则名称与定义之间使用 =/
来表示向规则添加一个选择选项。
ruleset = alt1 / alt2
ruleset =/ alt3
ruleset =/ alt4 / alt5
就表示:
ruleset = alt1 / alt2 / alt3 / alt4 / alt5
取值范围
%c##-##
可以使用破折号 -
来连接可选数值的范围。
DIGIT = %x30-39
表示:
DIGIT = "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9"
序列组
(rule1 rule2)
圆括号中的规则表示一个组合。
elem (foo / bar) blat
匹配 (elem foo blat)
或 (elem bar blat)
,而
elem foo / bar blat
匹配 (elem foo)
或 (bar blat)
。
值重复
\<a>*\<b>element
使用 *
来表示值重复,<a> 和 <b> 可选,<a> 表示最小重复次数,默认为 0,<b> 表示最大重复次数,默认为无穷次。
*\<element>
允许重复任意次,包括0;1*\<element>
表示最少一次;3*3\<element>
只允许3次;1*2\<element>
允许一到两次。
特定重复
\<n>element
等同于:
\<n>*\<n>element
表示 <element> 重复 n 次。
可选序列
[rule]
使用中括号括起来表示一组可选序列。
如:
[foo bar]
等同于 *1(foo bar)
。
注释
以 ;
开始表示注释的开始,一直到该行结束。如 ; comments
操作符优先级
上述各种操作符具有以下优先级,从顶部的最高(绑定最紧)到底部的最低(绑定最松):
规则名称、终端值
注释
取值范围
重复
分组,可选
连接
替代选项
ABNF 核心规则
ABNF 定义了一些常用的基本规则,如下:
规则 | 定义 | 含义 |
---|---|---|
ALPHA | %x41-5A / %x61-7A | A-Z / a-z |
BIT | “0” / “1” | “0”,”1” |
CHAR | %x01-7F | 任何 7-位 US-ASCII 字符,不包括 NUL |
CR | %x0D | 回车 |
CRLF | CR LF | 互联网标准换行 |
CTL | %x00-1F / %x7F | 控制字符 |
DIGIT | %x30-39 | 0-9 |
DQUOTE | %x22 | ” (双引号) |
HEXDIG | DIGIT / “A” / “B” / “C” / “D” / “E” / “F” | 十六进制数字 (0-9 A-F a-f) |
HTAB | %x09 | 水平制表符 |
LF | %x0A | 换行 |
OCTET | %x00-FF | 8 位数据 |
SP | %x20 | 空格 |
VCHAR | %x21-7E | 可见(可打印)字符 |
WSP | SP / HTAB | 空白符(空格或水平制表符) |
LWSP | *(WSP / CRLF WSP) | 多个空白符或换行加空白符 |
- 版权声明: