增强型巴科斯范式ABNF
RFC2234 定义了增加型巴科斯范式(ABNF)。近年来在Internet的定义中 ABNF 被广泛使用。ABNF 做了更多的改进。增强型巴科斯-瑙尔范式(ABNF)基于了巴科斯-瑙尔范式(BNF),但由它自己的语法和推导规则构成。这种元语言的发起原则是描述作为通信协议(双向规范)的语言的形式系统。它建档于 RFC 4234 中通常充当 IETF 通信协议的定义语言。
4.1. 推导规则
ABNF 规定是一组推导规则,写为:
规则 = 定义 ; 注释 CR LF
说明:
这里的规则是大小写敏感的非终结符,定义是由定义这个规则的符号序列、一个文档注释组成,并结束于回车换行。
规则名字是大小写不敏感的:, , 和 都提及同一个规则。规则名字由开始于一个字母的字母、数字和连字符组成。不要求用尖括号(“<”, “>”) (如 BNF 那样)包围规则名字。但是它们可以用来界定规则名字,比如在冗文中识别出规则名字的时候。ABNF 使用 7-位 ASCII 编码,在 8-位域中把高位置零。
终结符由一个或多个数值字符指定。数值字符可以指定为跟随着基数(b = 二进制, d = 十进制, x = 十六进制)的一个百分号“%”,随后是这个数值,或数值的串联(用“.” 来指示)。例如回车可以指定为十进制的 %d13 或十六进制的 %x0D。回车换行可以指定为 %d13.10。
文字正文通过使用包围在引号(")中字符串来指定。这些字符串是大小写不敏感的,使用的字符集是 US-ASCII。所以字符串“abc”将匹配“abc”, “Abc”, “aBc”, “abC”, “ABc”, “AbC”, “aBC” 和 “ABC”。对于大小写敏感匹配,必须定义明确的字符: 要匹配 “aBc” 定义将是 %d97 %d66 %d99。
4.2. 操作符
空白被用来分隔定义的各个元素: 要使空格被识别为分割符则必须明确的包含它。
4.3. 串联
规则1 规则2
规则可以通过列出一序列的规则名字来定义。
示例:
要匹配字符串“aba”可以使用下列规则:
fu = %x61; a
bar = %x62; b
mumble = fu bar fu
4.4. 选择
规则1 / 规则2
规则可以通过用反斜杠(“/”)分隔的多选一规则来定义。
示例:
要接受规则 或规则 可构造如下规则:
fubar = fu / bar
4.5. 递增选择
规则1 =/ 规则2
可以通过使用在规则名字和定义之间的“=/”来向一个规则增加补充选择。
示例:
规则
ruleset = alt1 / alt2 / alt3 / alt4 / alt5
等价于
ruleset = alt1 / alt2
ruleset =/ alt3
ruleset =/ alt4 / alt5
4.6. 值范围
%c##-##
数值范围可以通过使用连字符(“-”)来指定。
示例:
规则
OCTAL = "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7"
等价于
OCTAL = %x30-37
4.7. 序列分组
(规则1 规则2)
元素可以放置在圆括号中来组合定义中的规则。
示例:
要匹配“elem fubar snafu”或“elem tarfu snafu”可以构造下列规则:
group = elem (fubar / tarfu) snafu
要匹配“elem fubar”或“tarfu snafu”可以构造下列规则:
group = elem fubar / tarfu snafu
group = (elem fubar) / (tarfu snafu)
4.8. 可变重复
n*m规则
要指示一个元素的重复可以使用形式 *元素。可选的 给出要包括的元素的最小数目,缺省为 0。可选的 给出要包括的元素的最大数目,缺省为无穷。
对零或多个元素使用 *元素,对一或多个元素使用 1*元素,对二或三个元素使用 2*3元素。
4.9. 特定重复
n规则
要指示明确数目的元素可使用形式 元素,它等价于 *元素。
使用 2DIGIT 得到两个数字,使用 3DIGIT 得到三个数字。(DIGIT 在下面的核心规则中定义)。
4.10. 可选序列
[规则]
示例:
要指示可选元素下列构造是等价的:
[fubar snafu]
*1(fubar snafu)
0*1(fubar snafu)
4.11. 注释
; 注释
分号(“;”)开始一个注释并持续到此行的结束。
4.12. 操作符优先级
上述操作符有从最紧绑定(binding)到最松绑定的给定优先级:
字符串,名字形成(formation)
注释
值范围
重复
分组,可选
串联
选择
与串联一起使用选择操作符可以造成混淆,建议使用分组来做明确串联分组。
RFC2234 定义了增加型巴科斯范式(ABNF)。近年来在Internet的定义中 ABNF 被广泛使用。ABNF 做了更多的改进。增强型巴科斯-瑙尔范式(ABNF)基于了巴科斯-瑙尔范式(BNF),但由它自己的语法和推导规则构成。这种元语言的发起原则是描述作为通信协议(双向规范)的语言的形式系统。它建档于 RFC 4234 中通常充当 IETF 通信协议的定义语言。
4.1. 推导规则
ABNF 规定是一组推导规则,写为:
规则 = 定义 ; 注释 CR LF
说明:
这里的规则是大小写敏感的非终结符,定义是由定义这个规则的符号序列、一个文档注释组成,并结束于回车换行。
规则名字是大小写不敏感的:
终结符由一个或多个数值字符指定。数值字符可以指定为跟随着基数(b = 二进制, d = 十进制, x = 十六进制)的一个百分号“%”,随后是这个数值,或数值的串联(用“.” 来指示)。例如回车可以指定为十进制的 %d13 或十六进制的 %x0D。回车换行可以指定为 %d13.10。
文字正文通过使用包围在引号(")中字符串来指定。这些字符串是大小写不敏感的,使用的字符集是 US-ASCII。所以字符串“abc”将匹配“abc”, “Abc”, “aBc”, “abC”, “ABc”, “AbC”, “aBC” 和 “ABC”。对于大小写敏感匹配,必须定义明确的字符: 要匹配 “aBc” 定义将是 %d97 %d66 %d99。
4.2. 操作符
空白被用来分隔定义的各个元素: 要使空格被识别为分割符则必须明确的包含它。
4.3. 串联
规则1 规则2
规则可以通过列出一序列的规则名字来定义。
示例:
要匹配字符串“aba”可以使用下列规则:
fu = %x61; a
bar = %x62; b
mumble = fu bar fu
4.4. 选择
规则1 / 规则2
规则可以通过用反斜杠(“/”)分隔的多选一规则来定义。
示例:
要接受规则
fubar = fu / bar
4.5. 递增选择
规则1 =/ 规则2
可以通过使用在规则名字和定义之间的“=/”来向一个规则增加补充选择。
示例:
规则
ruleset = alt1 / alt2 / alt3 / alt4 / alt5
等价于
ruleset = alt1 / alt2
ruleset =/ alt3
ruleset =/ alt4 / alt5
4.6. 值范围
%c##-##
数值范围可以通过使用连字符(“-”)来指定。
示例:
规则
OCTAL = "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7"
等价于
OCTAL = %x30-37
4.7. 序列分组
(规则1 规则2)
元素可以放置在圆括号中来组合定义中的规则。
示例:
要匹配“elem fubar snafu”或“elem tarfu snafu”可以构造下列规则:
group = elem (fubar / tarfu) snafu
要匹配“elem fubar”或“tarfu snafu”可以构造下列规则:
group = elem fubar / tarfu snafu
group = (elem fubar) / (tarfu snafu)
4.8. 可变重复
n*m规则
要指示一个元素的重复可以使用形式 *元素。可选的 给出要包括的元素的最小数目,缺省为 0。可选的 给出要包括的元素的最大数目,缺省为无穷。
对零或多个元素使用 *元素,对一或多个元素使用 1*元素,对二或三个元素使用 2*3元素。
4.9. 特定重复
n规则
要指示明确数目的元素可使用形式 元素,它等价于 *元素。
使用 2DIGIT 得到两个数字,使用 3DIGIT 得到三个数字。(DIGIT 在下面的核心规则中定义)。
4.10. 可选序列
[规则]
示例:
要指示可选元素下列构造是等价的:
[fubar snafu]
*1(fubar snafu)
0*1(fubar snafu)
4.11. 注释
; 注释
分号(“;”)开始一个注释并持续到此行的结束。
4.12. 操作符优先级
上述操作符有从最紧绑定(binding)到最松绑定的给定优先级:
字符串,名字形成(formation)
注释
值范围
重复
分组,可选
串联
选择
与串联一起使用选择操作符可以造成混淆,建议使用分组来做明确串联分组。
#星火邀请赛#
去彼得森家做客的时候,我们的对话总是以打趣和大笑开始,这是来自阿尔伯塔省的彼得森很“小镇”的一面,他的青少年时期和电影《乱成一团》(Fubar)里所描绘的一模一样。彼得森的家是我见过的最迷人、最令人震撼的住宅。他和妻子塔米拥有许多雕刻面具和抽象画,家里的每一面墙上都挂满了各种各样的绘画,甚至连天花板和卫生间都是这样。
去彼得森家做客的时候,我们的对话总是以打趣和大笑开始,这是来自阿尔伯塔省的彼得森很“小镇”的一面,他的青少年时期和电影《乱成一团》(Fubar)里所描绘的一模一样。彼得森的家是我见过的最迷人、最令人震撼的住宅。他和妻子塔米拥有许多雕刻面具和抽象画,家里的每一面墙上都挂满了各种各样的绘画,甚至连天花板和卫生间都是这样。
Christan Jessen是一名43岁的英国医生,他在接受Fubar网络电台采访时称:“我可能要说些带有种族主义的话,我将不得不为此道歉。但是您不认为冠状病毒只是一个借口吗?我们都知道意大利人的情况,对他们来说,每一个借口都可以关闭一切、停止工作和延长午休时间。”此番言论一出,引发意大利各界人士强烈反驳。#意大利疫情# #意大利封闭全国#
✋热门推荐