Skip to main content

4. ABNF Definition of ABNF (ABNF的ABNF定义)

ABNF语法的ABNF表示

rulelist       = 1*( rule / (*c-wsp c-nl) )

rule = rulename defined-as elements c-nl
; 继续行如果下一行以空白开始

rulename = ALPHA *(ALPHA / DIGIT / "-")

defined-as = *c-wsp ("=" / "=/") *c-wsp
; 基本规则定义和增量备选项

elements = alternation *c-wsp

c-wsp = WSP / (c-nl WSP)

c-nl = comment / CRLF
; 注释或换行

comment = ";" *(WSP / VCHAR) CRLF

alternation = concatenation
*(*c-wsp "/" *c-wsp concatenation)

concatenation = repetition *(1*c-wsp repetition)

repetition = [repeat] element

repeat = 1*DIGIT / (*DIGIT "*" *DIGIT)

element = rulename / group / option /
char-val / num-val / prose-val

group = "(" *c-wsp alternation *c-wsp ")"

option = "[" *c-wsp alternation *c-wsp "]"

char-val = DQUOTE *(%x20-21 / %x23-7E) DQUOTE
; 引号文字文本字符串
; 排除 DQUOTE 本身

num-val = "%" (bin-val / dec-val / hex-val)

bin-val = "b" 1*BIT
[ 1*("." 1*BIT) / ("-" 1*BIT) ]
; 一系列串联的位值
; 或单个ONEOF范围

dec-val = "d" 1*DIGIT
[ 1*("." 1*DIGIT) / ("-" 1*DIGIT) ]

hex-val = "x" 1*HEXDIG
[ 1*("." 1*HEXDIG) / ("-" 1*HEXDIG) ]

prose-val = "<" *(%x20-3D / %x3F-7E) ">"
; 散文描述,作为最后手段

说明

这个ABNF规范使用ABNF来定义ABNF本身。这种自引用是有效的,因为规则的含义是明确的。

注意: prose-val(散文值)用于当无法用ABNF表示语法时,作为最后的手段。它应该谨慎使用,并且应该尽可能清晰地记录。