RFC5234ABNF语法规范_第1页
RFC5234ABNF语法规范_第2页
RFC5234ABNF语法规范_第3页
RFC5234ABNF语法规范_第4页
RFC5234ABNF语法规范_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、RFC5234 ABNF语法规范RFC5234 ABNFg法规范第1页/共17页RFC5234 ABNF语法规范修订记录修订日期修改人版本号修改内容2020-03-14程怀玺-Jadev1.0完成翻译初稿概述:Internet技术规范经常需要定义一个正式的语法,这些年中,一个改进的巴科斯-瑙尔范式(BNF ),称为增强型BNF (ABNF ),在许多Internet规范里比较流行。本规范描述了 ABNF ,其通过合理的表述能力平衡了紧凑型和简单性。ABNF和标准的BNF的差异涉及规则命名、重复、选择、顺序独立和取值范围。该规范还为许多Internet规范通用的核心词法分析器提供了附加的规则定义

2、和编码(即定义了一些常见的 通用规则)。第2页/共17页RFC5234 ABNF语法规范目录1 引言42 规则定义42.1 规则命名42.2 规则组成42.3 端点值52.4 外部编码63 操作符63.1 串联(Concatenation: Rulel Rule2) 63.2 选择(Alternatives: Rule1 / Rule2) 73.3 增量选择(Incremental Alternatives: Rule1 =/ Rule2) 73.4 取值范围选择(%c#-#) 83.5 序歹U组(Sequence Group: (Rule1 Rule2) 83.6 可变重复 (Variabl

3、e Repetition: *Rule) 83.7 指定重复(Specific Repetition: nRule) 93.8 可选序列重复(RULE) 93.9 注释(;注释信息)93.10 操作符优先级 104 ABNF定义的 ABNF(自举)105 安全考虑126 参考136.1 参考规范136.2 参考信息13附录A :致谢13附录B : ABNF的核心 ABNF 148.1. 核心规则148.2. 通用编码15第3页/共17页RFC5234 ABNF语法规范1引言Internet技术规范经常需要定义一个正式的语法,他们可以自由的采用任何规范作者认为有效的标记方法。这些年中,一个改进的

4、巴科斯 -瑙尔范式(BNF),称为增强型 BNF ,在许多Internet技术规范中非 常流行。ABNF通过合理的表述能力,很好的平衡了紧凑型和简单性。在阿帕网( Arpanet )的初期,每个规范包含了 ABNF的自身定义版本,这些规范包括email规范RFC733及RFC822,它们随后成为定义ABNF的常见引用。本规范分离了这些定义,以允许选择性参考,可以预见的是,本文档同时也提供了一 些修改和增强。ABNF和标准的BNF的差异涉及规则命名、重复、选择、顺序独立和取值范围。附录B为许多Internet规范通用的核心词法分析器提供了附加的规则定义和编码(即定义了一些常见的通用规则),它是为

5、了方 便其他文档引用而提供的,同时本文档主体中定义的元语言分开,并且与它的正式状态分开。2规则定义2.1 规则命名规则的名字就是名字自身,即一个由字母字符开始后跟一个或多个字母字符、数字和连字符组成的字符序列(字符串)。注意:规则的名字是非大小写敏感的。<rulename> 、<Rulename> 、<RULENAME>和<rUlENamE> ,所有这些名字都指的是同一个规则。不像原始的BNF,尖括号(“<",">")不是必选的。然而,只要尖括号的出现有利于辨别规则名字的使用时,尖括号也许会出现在规则名字

6、周围。这通常仅限于自由格式行文中的规则名称引用,或区分不由空格 分隔的字符串组成的规则中的部分规则时使用,如下面关于重复的讨论中所示。2.2 规则组成每个规则由如下序列定义:name = elements crlf其中,<name>是规则的名字,elements 是一个或多个规则名字或端点规范(terminalspecifications) , <crlf>是行尾指示器(回车后跟换行),=号分隔了规则名称和规则的定义。第4页/共17页RFC5234 ABNF语法规范elements( 元素)由一个或多个规则名字和 /或值定义的序列组成,这些序列按照本文档定义的各种操作

7、符组合到一起,比如选择或重复。为了方便阅读,规则定义是左对齐的。当一个规则需要多行时,需要缩进后续行(第一行外的其他行), 对齐和缩进都是相对 ABNF规则的第一行,并不需要与文档的左边距对齐。译者注:关于terminal , terminal是相对与规则说的,规则是可以有一个或多个规则按照操作符组成而成的,但是一层层解析规则到最底层的规则时,其定义是由terminal组成的,因此terminal本文翻译为端点。2.3 端点值规则被解析成 Termianl Values(端点值)字符串,通常称为字符。在 ABNF语法中,一个字符就是 一个非负整数,在特定上下文中,值(values)到字符集(比

8、如ASCII)的特定映射或编码方式将被指定。端点值由一个或多个数字字符指定,并显式指示这些字符的基数(2/10/16进制)解释。当前定义了如下基数:b = binary 二进制d = decimal 十进制x = hexadecimal十六进制所以:CR = %d13CR = %x0D分别指示了 US-ASCII编码中回车字符的十进制和十六进制形式。使用句点(“.”)表示分隔端点值,表示端点值的拼接字符串紧凑形式(相对于用空格和或水平制表符来说是紧凑的)。所以:CRLF = %d13.10ABFN允许直接指定文本字符串,通过双引号括起来表示。所以:command = "command

9、 string"文本字符串被解释为可打印字符的拼接。注意:ABNF字符串大小写不敏感,并且字符集是US-ASCII 码。所以:第5页/共17页RFC5234 ABNF语法规范rulename = "abc"和:rulename = "aBc以及"ABC"。,表示 0。是等价的,都可以匹配 "abc", "Abc", "aBc", "abC", "ABc", "aBC", "AbC&quo

10、t;要想定义大小写敏感的规则,则独立指定每一个字符接口。比如:rulename = %d97 %d98 %d99或rulename = %d97.98.99两个规则是等价的,都只会匹配小写字符abc。译者举例:ip-addr1=%d10%x2E.%d10%x2E.%d10%x2E.%d10%x2E2.4 外部编码端点值字符的外部呈现方式根据存储或传输环境的限制而多种多样,所以,同样的基于ABNF的语法可以有多种外部编码,比如一个版本用于 7-bit US-ASCIII 环境,另一个用于二进制八位元组 (octet ) 环境,同时还有一个其他的用于 16为Unicode 编码。编码的细节超出了

11、ABNF的范围,然而附录 B中 提供了大多数互联网应用通用的 7-bit US-ASCII 环境的定义。通过将语法和外部编码方式分离,是为了不同的编码环境可以使用相同的语法。3操作符3.1 串联(Concatenation: Rule1 Rule2)新规则可以经由线性空白符(空格和水平制表符)分隔的两个或多个其他规则拼接而成。比如:foo = %x61 ; abar = %x62 ; bmumble = foo bar foo所以,规则mumble匹配小写字符串"aba"。线性空白(LWS:Linear white space ):拼接操作是 ABNF解析模型的核心,一个连

12、续字符(1)第6页/共17页RFC5234 ABNF语法规范组成的字符串按照 ABNF定义的规则解析。. Internet(空格和水平制表符)自由地和隐式的出现在主要结构周围,比如用于分隔特定字符或者原子字符串,已经有历史了。注意:本ABNF规范没有提供线性空白的隐式规范。任何希望在分隔符或字符串段周围允许线性空白的语法都必须显式指定。在“核心”规则中提供这样 的空白字符,并在更高级的规则中使用它,通常是有帮助的。这里的“核心”规则可以形成一个词法分析 器,或者仅仅是主要规则集的一部分。3.2 选择(Alternatives: Rulel / Rule2)由正斜杠(“ / ”)分隔的元素是可选

13、的。因此:foo / bar只能匹配<foo> 或者<bar> 。注意:包含字母字符的带引号字符串是用于指定可选字符的特殊形式,它被解释为按指定顺序排序,但是大 小写混合使用的组合字符串集。译者举例:who = "foo" / "bar",可以匹配"foo" 和"bar" 各自字母顺序不变,但是大小写混排的各种形式。比如"fOo" 、"baR"等等。3.3 增量选择(Incremental Alternatives: Rule1 =/ Rule2)在片

14、段中指定一个由选择组成的列表,有时候是比较方便的。即,一个初始的规则匹配一个或多个选 择,而后来定义的规则要增加新的选择到现有集合中。这对从相同的父规则集派生出独立的规范,是特别 有用的,比如这经常发生在参数列表里。ABNF允许通过如下结构进行增量定义:oldrule =/ additional-alternatives所以如下操作后的 ruleset :ruleset = alt1 / alt2ruleset =/ alt3ruleset =/ alt4 / alt5第7页/共17页RFC5234 ABNF语法规范和下边的ruleset 是相同的:ruleset = altl / alt2

15、/ alt3 / alt4 / alt53.4 取值范围选择(c#-#)可选择的数值范围可以紧凑指定:使用一个连字符"-"去指示可选择值的范围。所以:DIGIT = %x30-39和如下规则是等价的:DIGIT = "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9"不能在字符串中同时指定数字值和数字值范围,在一个字

16、符串里表达式里,数字值要么使用.表示拼接,要么使用-表示指定取值范围。因此,要指定在行尾间指定一个可打印字符,可以用如下字符串表示:char-line = %x0D.0A %x20-7E %x0D.0A3.5 序列组(Sequence Group: (Rulel Rule2)括号中的元素被视为单个元素,其内容是严格排序的。因此:elem (foo / bar) blat匹配(elem foo blat) 或(elem bar blat) ,并且:elem foo / bar blat匹配(elem foo) 或(bar blat) 。注意:强烈建议,选择由多个规则名字或文本组成时,显式的使用分

17、组标记,而不是依赖于对裸选择项的正确读取。因此,建议使用如下的形式:(elem foo) / (bar blat)这种形式将避免马虎读者的误解。序列组符号也用于自由文本中,以从行文中引出元素序列(如上边红色字体内容)。操作符"*"3.6 可变重复(Variable Repetition: *Rule)放置于元素前表示重复,完整格式为:第8页/共17页RFC5234 ABNF语法规范<a>*<b>element其中<a>和<b>是可选的十进制数字,表示 element 至少重复<a>次和最多重复<b>次。

18、默认是0到无穷,所以*<element>允许重复任意次数,包括 0; 1*<element>表示重复至少1次;3*3<element>只允许重复 3次,1*2<element>允许重复1或2次。3.7 指定重复(Specific Repetition: nRule)如下形式的规则:<n>element等价于:<n>*<n>element表示元素<element> 只能重复n次。因此,2DIGIT 表示一个2个数字组成的数值,3ALPHA表示一 个3个字母组成的字符串。译者举例:IPV4_1_DIGI

19、T = "0" / "1" / "2"IPV4_2_DIGIT = %x30-35IPV4_3_DIGIT = %x30-35IPV4_DGROUP = 0*1IPV4_1_DIGIT 0*1IPV4_2_DIGIT 0*1IPV4_3_DIGITIPV4_ADDR = IPV4_DGROUP %x2E IPV4_DGROUP %x2E IPV4_DGROUP %x2E IPV4_DGROUP3.8 可选序列重复(RULE)中括号口包含一个可选出现的元素序列:foo bar等价于:*1(foo bar)3.9 注释(;注释信息)分号;

20、表示其后一直到行尾的内容都是注释。这是在说明中同时包含有用的注释事项的简单方法。第9页/共17页RFC5234 ABNF语法规范3.10 操作符优先级上述章节中描述的各种机制按如下优先级处理,从顶部的最高(绑定最紧密)到底部的最低(最松散)规则名字 Rule name 、行文 prose-val 、端点值组件 Terminal value Comment取值范围操作符 Value range重复操作符Repetition组操作符Grouping 、可选操作符Optional串联操作符Concatenation选择操作符Alternative混合使用选择操作符和串联操作符,容易造成混淆。再次强调

21、,建议使用分组运算符进行显式的串联分组。4 ABNF定义的ABNF(自举)注意:1 .此语法需要相对严格的规则格式。因此,规范中包含的规则集的版本可能需要进行预处理,以确保ABNF解析器可以解释该规则集。2 .此语法使用了附录 B中定义的规则注:中文是译者的增加的注释;rulelist 由至少1个到无穷个规则或(任意个c-wsp 和c-nl )组成rulelist = 1*( rule / (*c-wsp c-nl);rule 由 rulename 、defined-as elements c-nl组成;rulename是规贝U名字;defined-as主要是前后有任意个空白字符的"

22、="或"=/",具体见下;elements是一个或多个元素;c-n1是注释或回车换行符CRLFrule = rulename defined-as elements c-nl;continues if next line starts;with white space第10页/共17页RFC5234 ABNF语法规范;rulename由字母字符开头后跟任意个(字母字符、数字字符或连字符-)rulename = ALPHA *(ALPHA / DIGIT / "-");defined-as是在前后任意个*c-wsp 中间包含("=&qu

23、ot;或"=/")defined-as = *c-wsp ("=" / "=/") *c-wsp;basic rules definition and;incremental alternatives;elements 由alternation 和任意个c-wsp 拼接而成 elements = alternation *c-wsp;c-wsp 由 WSP或(c-n1 拼接 WSP)而成 c-wsp = WSP / (c-nl WSP);c-n1 由 comment 或 CRLF 组成 c-nl = comment / CRLF;co

24、mment or newline;comment 由;拼接任意个(WSP或VCHAR)、CRLF而成 comment = "" *(WSP / VCHAR) CRLF;alternation 等 于 concatenation 拼接任意个(任意个 c-wsp 拼 接"/" 拼 接; concatenation )alternation = concatenation *(*c-wsp "/" *c-wsp concatenation);concatenation 由 repetition拼接任意个(1 到无穷个 c-wsp 拼接 re

25、petition )concatenation = repetition *(1*c-wsp repetition);repeation由可选的repat 拼接任意个element 组成repetition = repeat element;repeat 由1到无穷个数字字符或者(任意个数字字符拼接*拼接任意个数字字符)组成repeat = 1*DIGIT / (*DIGIT "*" *DIGIT);element 由 rulename 或 group 或 option 或 char-val; 或 num-val 或 prose-val 组成element = rulena

26、me / group / option / char-val / num-val / prose-val;group 由"("拼接任意个*c-wsp 拼接alternation 拼接任意个*c-wsp 拼接"("而成 group = "(" *c-wsp alternation *c-wsp ")"option 由"” 拼接*c-wsp 拼接 alternation 拼接*c-wsp 拼接"" 而成第11页/共17页RFC5234 ABNF语法规范option = "&quo

27、t; *c-wsp alternation *c-wsp ""char-val 由DQUOTE拼接任意个(从 0x20至U 0x7E除"字符外的字符)拼接 DQUOTE组成 char-val = DQUOTE *(%x20-21 / %x23-7E) DQUOTE;quoted string of SP and VCHAR;without DQUOTE;num-val由 %接(bin-val 或 dec-val 或 hex-val )组成num-val = "%" (bin-val / dec-val / hex-val);bin-val 由字

28、符"b"拼接1或多个BIT ,拼接可选的;(1到多个(.拼接BIT)或者-拼接1到多个BIT )bin-val = "b" 1*BIT 1*("." 1*BIT) / ("-" 1*BIT);series of concatenated bit values;or single ONEOF range;dec-val 由字符"d"拼接1到多个DIGIT ,拼接可选的;1到多个(.拼接1到多个DIGIT )或者-拼接1到多个DIGITdec-val = "d" 1*DIGIT

29、1*("." 1*DIGIT) / ("-" 1*DIGIT);hex-val 由"x"拼接1到多个HEXDIG组成,拼接可选的;1 到多个(.拼接1到多个HEXDIG)或者-拼接1到多个HEXDIG组成hex-val = "x" 1*HEXDIG 1*("." 1*HEXDIG) / ("-" 1*HEXDIG);prose-val 由"<"拼接任意个(0x20-3D 或0x3F-7E(即除 <> 外的可打印字符)组成prose-val

30、 = "<" *(%x20-3D / %x3F-7E)">"bracketed string of SP and VCHAR;without angles;prose description, to be used as;last resort5安全考虑本规范不涉及安全性问题。第12页/共17页RFC5234 ABNF语法规范6.1 参考规范US-ASCII American National Standards Institute, "Coded CharacterSet - 7-bit American Standard Cod

31、e for InformationInterchange", ANSI X3.4, 1986.6.2 参考信息RFC733 Crocker, D., Vittal, J., Pogran, K., and D. Henderson,"Standard for the format of ARPA network text messages",RFC 733, November 1977.RFC822 Crocker, D., "Standard for the format of ARPA Internettext messages", STD

32、 11, RFC 822, August 1982.附录A:致谢The syntax for ABNF was originally specified in RFC 733. Ken L. Harrenstien, of SRI International, was responsible for re-coding the BNF into an Augmented BNF that makes the representation smaller and easier to understand.This recent project began as a simple effort t

33、o cull out the portion of RFC 822 that has been repeatedly cited by non-email specification writers, namely the description of Augmented BNF. Rather than simply and blindly converting the existing text into a separate document, the working group chose to give careful consideration to the deficiencie

34、s,as well as benefits, of the existingspecification and related specifications made available over the last 15 years, and therefore to pursue enhancement. This turned the project into something rather more ambitious than was first intended.Interestingly, the result is not massively different from th

35、at original, although decisions, such as removing the list notation, came as a surprise.第13页/共17页RFC5234 ABNF语法规范This "separated" version of the specification was part of the DRUMSworking group, with significant contributions from Jerome Abela, Harald Alvestrand, Robert Elz, Roger Fajman,

36、Aviva Garrett, Tom Harsch, Dan Kohn, Bill McQuillan, Keith Moore, Chris Newman, Pete Resnick, and Henning Schulzrinne. Julian Reschke warrants a special thanks for converting the Draft Standard version to XML source form.附录B: ABNF的核心 ABNF本附录中包含了一些通用的基本规则,基本规则都采用大写字母形式。请注意,这些规则仅对以7位ASCII或7位ASCII的超集字符

37、集(UTF-8编码是包含 ASCII码)编码的 ABNFW"效。8.1 .核心规则特定的基本规则都以大写形式表示,比如SP、HTAB CRLF DIGIT、ALPHAS等。ALPHA = %x41-5A / %x61-7A ; A-Z / a-z BIT = "0" / "1" CHAR = %x01-7F;any 7-bit US-ASCII character, ;excluding NULCR = %x0D;carriage return CRLF = CR LF;Internet standard newline CTL = %x00-

38、1F / %x7F;controls DIGIT = %x30-39;0-9DQUOTE = %x22 ;"(Double Quote)HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F" HTAB = %x09;horizontal tabLF = %x0A ;linefeedLWSP = *(WSP / CRLF WSP);Use of this linear-white-space rule ;permits l

39、ines containing only white ;space that are no longer legal in ;mail headers and have caused第14页/共17页RFC5234 ABNF语法规范;interoperability problems in other;contexts.;Do not use when defining mail;headers and use with caution in;other contexts.OCTET = %x00-FF;8 bits of dataSP = %x20VCHAR = %x21-7E;visibl

40、e (printing) charactersWSP = SP/HTAB ;white space8.2 .通用编码从外部看,数据表示为“网络虚拟ASCII" (即8位字段中的7位US-ASCII),高(第8)位设置为零。值字符串按“网络字节顺序”排列,其中较高值的字节显示在左侧,并首先通过网络发送(网络传 输是大端序传送)。第15页/共17页Authors ' AddressesDave Crocker (editor) Brandenburg InternetWorking 675 Spruce Dr.Sunnyvale, CA 94086USPhone: +1.408.

41、246.8253EMail:dcrockerPaul OverellTHUS plc.1/2 Berkeley Square,99 Berkeley StreetGlasgow G3 7HRUKRFC5234 ABNF语法规范第16页/共17页EMail:paul.overellRFC5234 ABNF语法规范Full Copyright StatementCopyright (C) The IETF Trust (2008).This document is subject to the rights, licenses and restrictions contained inBCP 78

42、, and except as set forth therein, the authors retain all their rights.This document and the information contained herein are provided on an "AS IS"basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS OR IS SPONSORED BY (IFANY), THE INTERNET SOCIETY, THE IETF TRUST AND THE INTERNET ENGINEE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论