增强型巴科斯范式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)
注释
值范围
重复
分组,可选
串联
选择
与串联一起使用选择操作符可以造成混淆,建议使用分组来做明确串联分组。
#德语每日一句#
Wir werden alt, wenn die Erinnerung uns zu freuen beginnt. Wir sind alt, wenn sie uns schmerzt.
倘若回忆带给我们的是快乐,说明我们正在变老;倘若回忆令我们伤感,说明我们已经老去。
#德语词汇#
die Erinnerung, -en回忆
#德语句子##德语美句##晚安德语##每日德语#
正在变老![嘻嘻] https://t.cn/RI7nYAL
Wir werden alt, wenn die Erinnerung uns zu freuen beginnt. Wir sind alt, wenn sie uns schmerzt.
倘若回忆带给我们的是快乐,说明我们正在变老;倘若回忆令我们伤感,说明我们已经老去。
#德语词汇#
die Erinnerung, -en回忆
#德语句子##德语美句##晚安德语##每日德语#
正在变老![嘻嘻] https://t.cn/RI7nYAL
有一个真相,年轻人越早知道越好。
90%的人都不懂什么叫摸鱼。
很多人拿微薄的3千4千工资,坐在写字楼的高端马桶上看八卦新闻,一坐就是1小时;
为摸鱼偷乐,实际上只是在浪费时间,还顺手把自己的成长时间都扔在了刚才的马桶里。
真正的摸鱼是什么?——趁混乱时私自捞取利益
坐马桶看八卦,哪有为自己捞取利益?摸都没摸明白,只是浪费了时间,可惜了鱼。
再者说,他们只要是坐在电脑前敲键盘,不管在做什么,对于老板来说就是认真努力的合格员工。
但是躲在厕所摸鱼,老板到办公室连他们人都看不到,印象分没了,自己的时间浪费了,这鱼不是摸得更亏吗?
要说,真正的摸鱼大师,一定能在老板面前做自己的私事儿。
比如在电脑码着微博,抬头看到老板快到面前,能熟悉使用Alt+Tab切换任务窗口。
不说了,老板来了。#情感#
90%的人都不懂什么叫摸鱼。
很多人拿微薄的3千4千工资,坐在写字楼的高端马桶上看八卦新闻,一坐就是1小时;
为摸鱼偷乐,实际上只是在浪费时间,还顺手把自己的成长时间都扔在了刚才的马桶里。
真正的摸鱼是什么?——趁混乱时私自捞取利益
坐马桶看八卦,哪有为自己捞取利益?摸都没摸明白,只是浪费了时间,可惜了鱼。
再者说,他们只要是坐在电脑前敲键盘,不管在做什么,对于老板来说就是认真努力的合格员工。
但是躲在厕所摸鱼,老板到办公室连他们人都看不到,印象分没了,自己的时间浪费了,这鱼不是摸得更亏吗?
要说,真正的摸鱼大师,一定能在老板面前做自己的私事儿。
比如在电脑码着微博,抬头看到老板快到面前,能熟悉使用Alt+Tab切换任务窗口。
不说了,老板来了。#情感#
✋热门推荐