扩充巴科斯范式

✍ dations ◷ 2025-10-30 23:30:31 #扩充巴科斯范式

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

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

相关

  • 鞘翅目See subgroups of the order Coleoptera(英语:subgroups of the order Coleoptera)鞘翅目(Coleoptera)是昆虫纲中最大的目,包括各种甲虫。目前全世界的甲虫,约182科,约有35万种,超过
  • 朱利叶斯·尼雷尔国际机场朱利叶斯·尼雷尔国际机场(斯瓦希里语:Uwanja wa ndege wa Kimataifa wa Julius Nyerere;IATA代码:DAR;ICAO代码:HTDA)是坦桑尼亚联合共和国旧都、最大城市达累斯萨拉姆的国际机场,
  • 奥拉维·帕沃莱宁奥拉维·帕沃莱宁(芬兰语:Olavi Paavolainen,1903年9月17日-1964年7月19日)是芬兰作家、诗人、散文家和记者。帕沃莱宁是文学组织火炬社(英语:Tulenkantajat)的中坚人物,也是芬兰在两
  • 米尔冉吉普·杜拉托夫米尔冉吉普·杜拉托夫(哈萨克语:Міржақып Дулатұлы;俄语:Миржакып Дулатов,1885年11月25日-1935年10月5日)他是哈萨克诗人、作家、哈萨克民族主义
  • 阿雷纳莱斯峰阿雷纳莱斯峰是智利的火山,位于该国南部伊瓦涅斯将军艾森大区,属于安第斯山脉的一部分,海拔高度3,437米,最近一次火山喷发在1979年发生,人类在1958年首次成功登顶。
  • 民丹莪民丹莪(马来语:Bintangor),是马来西亚砂拉越州泗里街省马拉端县的首府。民丹莪又称桔子城,是一个以福州人为主的小镇,和诗巫一样坐落在拉让江河畔,距离诗巫约有45分钟车程。民丹莪
  • 民间心理学在心智哲学和认知科学中,民俗心理学或常识心理学,是人类解释和预测他人行为和心理状态的一种能力。 传统上,民间心理学研究的重点是日常生活中的人--没有受过各种科学学术领域的正式训练的人--如何进行心理状态的归属。这一领域主要集中在反映个人信仰和欲望的意向性状态上;每一种状态都用日常语言和概念来描述,如 "信仰"、"欲望"、"恐惧 "和 "希望"。 取消主义主张民间心理学是错误的,应予以抛弃。在认知、解释或批评人类行为时,人们会区分有意行为和无意行为。在人际互动中,对某一行动的反应是来自于自身如何评断该行为
  • 流水面流水素面(流し素麺),是日本的一种面类料理,属于素面的一种,又称流面。将竹子纵切面剖半,在凹槽装水让面条顺流而下,食客分别等在竹子两侧,用筷子拦截夹起,沾上鲣鱼酱油食用。面条类似台湾白面线(寿面),且在煮沸后马上将面条放入冷水中,以保持绝佳的嚼劲。
  • 刘佩瑛刘佩瑛(1921年5月17日-2023年1月2日),女,四川双流人,中国蔬菜专家、园艺教育家,曾任西南农业大学教授、博士生导师。
  • 史蒂芬·瓦德史蒂芬·瓦德(英语:Steven C. Wade,1983年-)是大规模多人在线游戏(MMORPG) 的元老级人物。他在游戏开发过程中雇佣多名翻译,却违约不付翻译费,得到国际翻译界的唾弃!他在西方市场上畅销的数款游戏有:沙漠传说系列,媒体eGenesis、最后的乱局,媒体Aeria游戏,最近发布的是天龙八部,媒体是纳斯达克上市公司畅游,即北京畅游时代数码技术有限公司。他创办了MMOsmart公司,为多家国际知名品牌和公司提供游戏支持,这些客户包括:迪士尼和华纳兄弟。1983年10月29日出生于美国西弗吉尼