扩充巴科斯范式

✍ dations ◷ 2025-12-07 16:33:18 #扩充巴科斯范式

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

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

相关

  • 肩胛骨肩胛骨(scapula)位于胸廓背部,在第2至第7肋骨的高度,为一大的三角形扁平骨。Pectoral girdle - frontDiagram of the human shoulder joint. Anterior view.Diagram of the huma
  • 白领犯罪白领犯罪(英语:White-collar crime)指的是以取得钱财(尤其是钜额)为动机之非暴力犯罪。犯罪学理论史上,第一个提出“白领犯罪”概念者,是美国的社会学家暨犯罪学家爱德文·苏哲兰,在
  • 时代计划时代计划(英语:Tempora),又译颞颥计划,是英国政府通信总部(GCHQ)的秘密计算机大规模监控系统代号。这个系统的功能是暂时存储经光纤传输的大部分互联网通讯,以便在事后作进一步分析
  • 弗雷德里克·帕西弗雷德里克·帕西 (Frédéric Passy 1822年5月20日-1912年6月12日),法国理论经济学家,世界第一个国际和平组织——国际和平联盟(英语:League of Peace and Freedom)和各国议会联盟
  • 破坏偶像主义破坏偶像主义(英语:iconoclasm)指一种对宗教偶像或其它象征或纪念物的刻意摧毁的行为,通常带有宗教或政治动机。此行为经常发生在重大政治或宗教变动之后。该术语也包括更为具体
  • 哈荔田哈荔田(1912年-1989年),男,回族,直隶(今河北)保定人,中国中医妇科专家,曾任天津市政协副主席,第六、七届全国政协委员。
  • 麦谨思·贝索斯麦谨思·S·贝索斯(英语:MacKenzie S. Tuttle,原姓督陶(Tuttle),1970年4月7日-)是一名美国小说家和亿万富翁。麦谨思为亚马逊公司创办人杰弗里·贝索斯的前妻,二人在1993年结婚,2019年
  • 墨氏家族的成人礼《墨氏家族的成人礼》(英语:The Adventure of the Musgrave Ritual)是柯南·道尔所著的福尔摩斯探案的56个短篇故事之一,收录于《福尔摩斯回忆录》,此故事是福尔摩斯向华生讲述自
  • 法官备忘录法官备忘录(英语:Bench memorandum,复数形为bench memoranda,也称为bench memo),法律术语,它是一种法律文书,常见于美国法院。法官备忘录是一份简单扼要的备忘录,记录法律诉讼案的事
  • 安奎伦安奎伦(布农语:Ankuilun),是布农族传说中,关于死后复生的一种观念。安奎伦的意思来自于“蜕皮”(Kafit),也可视为金蝉脱壳、脱胎换骨、换季等词语延伸意。布农族人认为世间万物在每年都需进行安奎伦,植物类的叫做换装,有壳类的则叫脱壳,而毛羽类的便叫做换毛。古时候的人如蛇一样会死而复生(因蛇蜕皮一次,便如同死亡一次),然而复生之人在饮食却无法与正常人一样。故曾有一妇人在七日后从土中爬出讨食,然而却如无底洞般无法饱腹,最终在家人不慎耐烦的情况下害羞地钻回地洞不再出来,至此过世的人再也不愿回到活人身旁。