扩充巴科斯范式

✍ dations ◷ 2025-11-25 13:37:13 #扩充巴科斯范式

在计算机科学中,扩充巴科斯-瑙尔范式(ABNF)是一种基于巴科斯-瑙尔范式(BNF)的元语言,但它有自己的语法和派生规则。ABNF的原动原则是描述一种作为双向通信协议的语言的形式系统。它是由 (页面存档备份,存于互联网档案馆)("STD 68",大小写样式按照原文)定义的,也就是RFC 5234,经常用于互联网工程任务组(IETF)通信协议的定义语言。

RFC 5234取代了RFC 4234 (取代了RFC 2234).

一个ABNF规范是一些推导规则的集合,书写为:

规则 = 定义;注释CR LF

其中:

规则名字是不区分大小写的: <rulename>, <Rulename>, <RULENAME><rUlENamE>都指的是同一个规则。规则名字由一个字母以及后续的多个字母、数字和连字符(减号)组成。

用尖括号(“<”,“>”)包围规则名并不是必需的(如同它们在BNF里那样),但是它们可以用来在散文中界定规则名,以方便识别出规则名。

最终值由一个或多个数值字符指定。

数值字符可按下面的方式指定:先是一个百分号“%”,紧跟着基数(b = 二进制, d = 十进制, x = 十六进制),再其后是这个数值或数值串(用“.”来指示串联)。例如:“回车”可以用十进制的%d13或十六进制的%x0D来指定,而“回车换行”则可以用%d13.10来指定。

字面文本是通过包含在在双引号(")中字符串来指定的。这些字符串是不区分大小写的,使用的字符集是(US-)ASCII。所以字符串“abc”将匹配“abc”,“Abc”,“aBc”,“abC”,“ABc”,“AbC”,“aBC”和“ABC”。对于区分大小写的匹配,必须定义明确的字符,例如:若要匹配“aBc”,定义必须是%d97 %d66 %d99

空白字符被用来分隔定义中的各个元素:要使空格被识别为分割符则必须明确的包含它。

规则1规则2

规则可以通过列出一系列的规则名来定义。

要匹配字符串“aba”可以使用下列规则:

规则1 / 规则2

一个规则可以通过用斜杠(“/”)分隔的可供选择的子规则列表来定义。

要接受规则<foo>或规则<bar>可构造如下规则:

规则1 =/ 规则2

可以通过在和之间使用“=/”来向一个规则增加补充选择。

规则

等价于

%c##-##

数值范围可以通过使用连字符(“-”)来指定。

规则

等价于

(规则1规则2)

在中,元素可以放置在圆括号中来将组合起来,该组合视为单个元素。

要匹配“elem foobar snafoo”或“elem tarfoo snafoo”可以构造下列规则:

要匹配“elem foobar”或“tarfoo snafoo”可以构造下列规则:

元素前面的星号*表示重复,其完整形式是:

m*n规则

要表示一个元素的重复,就要使用<m>*<n>元素形式。可选的<m>给出要包含的元素的最小数目,默认为0;可选的<n>给出要包含的元素的最大数目,默认为无穷大。

例子:

n规则

要表示特定数目的元素可使用形式<n>元素,相当于用不定量重复形式表示的<n>*<n>元素

使用2DIGIT得到两个数字,使用3DIGIT得到三个数字。(DIGIT在下面的核心规则中定义,也见例子中的)。

要表示可选元素,下列构造是等价的:

;注释

注释从一个分号(“;”)开始,并持续到此行的结束。

下面的操作符给出了从高(结合最紧密)到低(结合最松散)的优先级:

操作符与一起使用会造成混淆,因此建议使用来确保串联组的明确。

例如:

我们 = 你 我/他 她

会产生下面两种歧义:

所以,使用来确保不会产生歧义:

(你 我)/(他 她)

核心规则

核心规则定义于ABNF标准中。

在巴科斯范式(BNF)条目中的邮政地址的例子可以被指定为:

postal-address = name-part street zip-partname-part = *(personal-part SP) last-name  CRLFname-part = / personal-part CRLFpersonal-part = first-name / (initial ".")first-name = *ALPHAinitial = ALPHAlast-name = *ALPHAsuffix = ("Jr." / "Sr." / 1*("I" / "V" / "X"))street =  house-num SP street-name CRLFapt = 1*4DIGIThouse-num = 1*8(DIGIT / ALPHA)street-name = 1*VCHARzip-part = town-name "," SP state 1*2SP zip-code CRLFtown-name = 1*(ALPHA / SP)state = 2ALPHAzip-code = 5DIGIT 

RFC 5234 (页面存档备份,存于互联网档案馆)加入了一条结合LWSP的警告,如下:

若使用该直线空白规则,将允许存在只包含空白字符的行,而这样的行在邮件头中已不再合法,并且已在其他环境中导致了互操作问题。不要在定义邮件头时使用它,在其他环境下使用时也要格外注意。

相关

  • 印度语言印度语言非常复杂,大约有几百种,根据1961年的统计,有1652种,根据2001年的统计,有29种语言的使用人口超过一百万,有122种语言的使用人口超过一万人,这些语言主要分属于两大语系:印欧
  • 计亮年计亮年(1934年4月20日-),配位化学及生物无机化学专家,中国科学院院士(2003年)。现任广东省化学会理事长,中山大学教授、化学与化学工程学院院长。浙江省鄞县人,1934年出生上海市,1956
  • 兵部兵部是中国古代官署名,六部之一,其长官为兵部尚书。兵部在隋唐时已设置,属六部之一,掌管武官选用及兵籍、军械、军令等。以尚书为主官,侍郎为次官。迄至清末,此制历代沿袭,但职权则
  • 大腕《大腕》(英语:Big Shot's Funeral)是中国导演冯小刚于2001年执导的一部贺岁片,是一部黑色幽默的喜剧电影。该片由华谊兄弟广告公司、太合影视和哥伦比亚影视公司联合出品。这也
  • 卡洛斯·路易斯·里维拉-菲耶韦卡洛斯·路易斯·德里维拉-菲耶韦(西班牙语:Carlos Luis de Ribera y Fieve,1815年-1891年4月14日)是19世纪西班牙画家,新古典主义画家胡安·安东尼奥·里维拉的儿子。出生于罗马
  • 沙河 (唐山)沙河,位于中华人民共和国河北省唐山市的一条河流,发源于迁安市蔡园镇好树店村(郝树店村)以北的灵山,蜿蜒向南,流经迁安市西南部、滦州市西部、古冶区东部、丰南区东部和曹妃甸区西
  • 铜陵长江公铁大桥铜陵长江公铁大桥,是位于中国安徽省的一座的公路铁路两用斜拉桥,跨越长江铜官山河段荻港水道中部,连接无为县和铜陵义安区,正桥全长16.719公里,造价37亿元,由北引桥、跨江主桥和南
  • 董嗣谌董嗣谌(?-?),山东登州府莱阳县军籍。父亲董献策,邑庠生,人称“老儒”,好学安贫,言动不苟,因子嗣朴、嗣谌贵,赠衡州府知府、再赠中大夫,湖广布政司参政。母亲王氏治家严整,训督五子有成。五子:董嗣德、董嗣儒、董嗣醇、董嗣朴、董嗣谌。天启元年(1621年)辛酉科山东乡试亚魁,天启五年(1625年)乙丑科进士,翰林院编修侯恪门生,授户部主事,升陕西司员外郎,晋郎中。崇祯元年任河南归德府知府,历河南布政司左参政,官至河南按察使。妻赵氏,封宜人。兄董嗣朴(1578~1671),字长白,号观复,天启元年与弟董嗣谌同
  • 1999年奥里萨气旋1999年奥里萨气旋(IMD指定为BOB 06,联合台风气象中心指定为05B),是北印度洋有记录以来最强烈的热带气旋,也是该地区最具破坏性的热带气旋之一。1999年奥里萨邦气旋于10月25日在西北太平洋形成热带低压,尽管它的起源可以追溯到四天前西北太平洋的一个对流区,扰动沿着西偏北的路径逐渐增强,进入印度洋,次日达到气旋风暴强度。得益于非常有利的条件,风暴开始爆发性增强且在10月28日达到超强气旋风暴强度,在第二天达到巅峰前风速为 260 千米/小时(160 英里/小时)和创纪录的低压为 912 毫巴(h
  • 西蒙·哈特西蒙·哈特(英语:Simon Hart,1963年8月15日-)是一位威尔士政治人物,他的党籍是保守党。自2010年开始,他担任西卡马森和南彭布罗克郡选区选出的英国下议院议员。2019年获委任为威尔士事务大臣。他已经结婚并有两个孩子。特拉斯内阁里希·苏纳克内阁(里希·苏纳克内阁,2022年10月25日-)现任内阁