BNF范式简析:
1. BNF范式结构:
a. 命名规则
name = definition
以=字符分开
b. 标题
literal用引号包住,默认小写
eg: "hello"
c. rule1 | rule2
分隔符,说明多规则的或关系
eg: yes | no
d. (rule1 rule2)
用()包住的无素集作为一个元素
eg: "(elem1 (foo | bar) elem3)", (foo | bar)是elem2
e. *rule
*为rule要反复出现的次数
eg: 10elem, elem至少反复出现10次
f. [rule]
[]说明rule是可选的, 即[rule]=0*1rule
g. N rule
N说明rule反复出现N次,且仅N次
N rule = N*Nrule
h. #rule
#rule与*rule类似
i. ;comment
;说明开始注释一行
2. 词法与语法元素及范式
token = 1*<any CHAR except CTLs or separators>
separators = "(" | ")" | "<" | ">" | "@"
| "," | ";" | ":" | "\" | <">
| "/" | "[" | "]" | "?" | "="
| "{" | "}" | SP | HT
OCTET = <any 8-bit sequence of data>
CHAR = <any US-ASCII character (octets 0 - 127)>
UPALPHA = <any US-ASCII uppercase letter "A".."Z">
LOALPHA = <any US-ASCII lowercase letter "a".."z">
ALPHA = UPALPHA | LOALPHA
DIGIT = <any US-ASCII digit "0".."9">
CTL = <any US-ASCII control character
(octets 0 - 31) and DEL (127)>
CR = <US-ASCII CR, carriage return (13)>
LF = <US-ASCII LF, linefeed (10)>
SP = <US-ASCII SP, space (32)>
HT = <US-ASCII HT, horizontal-tab (9)>
<"> = <US-ASCII double-quote mark (34)>
CRLF = CR LF
LWS = [CRLF] 1*( SP | HT )
TEXT = <any OCTET except CTLs,
but including LWS>
HEX = "A" | "B" | "C" | "D" | "E" | "F"
| "a" | "b" | "c" | "d" | "e" | "f" | DIGIT
comment = "(" *( ctext | quoted-pair | comment ) ")"
ctext = <any TEXT excluding "(" and ")">
quoted-string = ( <"> *(qdtext | quoted-pair ) <"> )
qdtext = <any TEXT except <">>
quoted-pair = "\" CHAR
这样就可简单的实现HTTP1.1解析器的词法分析与语法预处理功能。
2.1 Augmented BNF
2.2 Basic Rules
mars
2012.05.08
If you have more info to communicate with me for this article, please feel free to
Q-me:270982354 or E-me: mars.fu@foxmail.com.