扩充巴科斯范式

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

在计算机科学中,扩充巴科斯-瑙尔范式(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的警告,如下:

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

相关

  • 呈缴本法定送存,即法律规定团体和个人将所发表的出版物呈缴至国家图书馆或其他指定的处所。需要法定送存的出版物一般为书籍和期刊,但有时也会包括其他媒体(例如录音)等。不同国家对需
  • 台风战机台风战斗机(英语:Eurofighter Typhoon,又常被称为EF-2000)是一款双发动机,采前翼加上三角翼(鸭式布局)设计的多用途战机。参与设计与生产的欧洲战机公司(Eurofighter GmbH)是由数家欧
  • 贝琪·德沃斯伊丽莎白·“贝琪”·德沃斯(英语:Elisabeth "Betsy" DeVos;1958年1月8日-),本姓普林斯(英语:Prince),是美国密歇根州一名政治人物、富豪、商人、慈善家和教育活动家,现任美国教育部长
  • 面包和马戏“面包和马戏”(拉丁语:panem et circenses),或译作面包和游戏,用于比喻一种肤浅的绥靖手段和愚民政策。在政治层面,这个短语是用来形容民众对政府认可的产生不是通过政府示范或实
  • 李憕李憕(?-755年),并州太原府文水县(今山西省吕梁市文水县)人,祖籍陇西郡狄道县(今甘肃省定西市临洮县),出自陇西李氏敦煌房,凉武昭王李暠十一世孙,神龙年间右台监察御史李希倩的儿子,安史之
  • 刘福助刘福助(1940年10月16日-),出生于今新北市中和区,祖籍福建福州,台湾著名男艺人,擅长以深具地方特色之口语化俗谚或俚语融入歌曲词意之中,以闽南语发行颇多专辑。父亲是皮鞋师傅,16岁自
  • 于忠福 于忠福(1956年7月-),山东莱阳人,中国人民解放军空军上将。中国共产党第十九届中央委员会委员。1974年12月,参加中国人民解放军空军,1976年入华中师范大学政治系学习。历任空军雷达兵第四十九团司令部战士、宣传教育干事、政治指导员、政治处组织股股长、武汉军区空军政治部任免科长。1985年起,历任济南军区空军政治部干部处副处长、处长。1997年8月,任济南军区空军航空兵19歼击师政委。2004年6月,任北京军区空军航空兵24歼击师政委。2006年3月,任南京军区空军政治部副主任,同年9月改任空军上海
  • 利瓦德利瓦德(克罗地亚语:Livade)是位于克罗地亚西北部伊斯特拉半岛的一个城镇。据2001年人口普查,利瓦德的人口有225人 。利瓦德有温泉疗养地。
  • 斯尔詹·克里姆斯尔詹·克里姆(马其顿语:Срѓан Керим,1948年12月12日-,斯科普里),马其顿政治家、外交家、经济学家,曾任南斯拉夫马其顿共和国对外经济关系部长(1986年-1989年)、马其顿共和国外交部长(2000年-2001年)等。
  • 加布里尔·克拉默加布里尔·克拉默(法语:Gabriel Cramer,大陆教科书或译作克莱姆,台湾教科书多译作克拉玛,1704年7月31日-1752年1月4日),瑞士数学家。克拉默早年在日内瓦读书,1722年时发表论文而获得博士学位 ,1724年起在日内瓦加尔文学院任教,1734年成为几何学教授,1750年任哲学教授。他自1727年起进行为期两年的旅行访学。在巴塞尔与约翰·伯努利、欧拉等人交流学习,结为挚友。后又到英国、荷兰、法国等地拜见许多数学名家,回国后在与他们的长期通信中,加强了数学家之间的联系,为克拉默的数学宝库