RFC 822 中文版 MIME解析基础(6)(第9-10页)

第9页 

--------------------------------------------------------------------------------------------------------
     3.2.  HEADER FIELD DEFINITIONS

          These rules show a field meta-syntax, without regard for the
     particular  type  or internal syntax.  Their purpose is to permit
     detection of fields; also, they present to  higher-level  parsers
     an image of each field as fitting on one line.

     field       =  field-name ":" [ field-body ] CRLF

     field-name  =  1*<any CHAR, excluding CTLs, SPACE, and ":">

     field-body  =  field-body-contents
                    [CRLF LWSP-char field-body]

     field-body-contents =
                   <the ASCII characters making up the field-body, as
                    defined in the following sections, and consisting
                    of combinations of atom, quoted-string, and
                    specials tokens, or else consisting of texts>

--------------------------------------------------------------------------------------------------------

     3.2.  消息头域定义

          这些规则是消息头域的元语法定义, 它不是为了定义特殊的类型或者某个内部语法
     (是通用的定义), 此语法定义的目的是为了在一行里方便的找到消息头的域, 并且把消息
     的各部分传递给更高级的解析器.

     域       =  域名 ":" [ 域主体 ] 回车换行

     域名  =  1*<任意字符, 除了 控制字符, 空格, 和 ":">

     域主体  =  域内容
                    [回车换行 分割符 域主体]

     域内容 =
                   <ASCII字符组成了域主体,就如下面章节的定义,
                   由词,被引串,特殊字符和其他的文本联合组成域内容>

--------------------------------------------------------------------------------------------------------

第10页

--------------------------------------------------------------------------------------------------------
     3.3.  LEXICAL TOKENS

          The following rules are used to define an underlying lexical
     analyzer,  which  feeds  tokens to higher level parsers.  See the
     ANSI references, in the Bibliography.

                                                 ; (  Octal, Decimal.)
     CHAR        =  <any ASCII character>        ; (  0-177,  0.-127.)
     ALPHA       =  <any ASCII alphabetic character>
                                                 ; (101-132, 65.- 90.)
                                                 ; (141-172, 97.-122.)
     DIGIT       =  <any ASCII decimal digit>    ; ( 60- 71, 48.- 57.)
     CTL         =  <any ASCII control           ; (  0- 37,  0.- 31.)
                     character and DEL>          ; (    177,     127.)
     CR          =  <ASCII CR, carriage return>  ; (     15,      13.)
     LF          =  <ASCII LF, linefeed>         ; (     12,      10.)
     SPACE       =  <ASCII SP, space>            ; (     40,      32.)
     HTAB        =  <ASCII HT, horizontal-tab>   ; (     11,       9.)
     <">         =  <ASCII quote mark>           ; (     42,      34.)
     CRLF        =  CR LF

     LWSP-char   =  SPACE / HTAB                 ; semantics = SPACE

     linear-white-space =  1*([CRLF] LWSP-char)  ; semantics = SPACE
                                                 ; CRLF => folding

     specials    =  "(" / ")" / "<" / ">" / "@"  ; Must be in quoted-
                 /  "," / ";" / ":" / "/" / <">  ;  string, to use
                 /  "." / "[" / "]"              ;  within a word.

     delimiters  =  specials / linear-white-space / comment

     text        =  <any CHAR, including bare    ; => atoms, specials,
                     CR & bare LF, but NOT       ;  comments and
                     including CRLF>             ;  quoted-strings are
                                                 ;  NOT recognized.

     atom        =  1*<any CHAR except specials, SPACE and CTLs>

     quoted-string = <"> *(qtext/quoted-pair) <">; Regular qtext or
                                                 ;   quoted chars.

     qtext       =  <any CHAR excepting <">,     ; => may be folded
                     "/" & CR, and including
                     linear-white-space>

     domain-literal =  "[" *(dtext / quoted-pair) "]"
--------------------------------------------------------------------------------------------------------
     3.3.  词定义
          下面的规则用来定义基本的词法分析规则,
          本规则是为了把词分析出来送到更高级的解析器,参看参考数目里的ANSI引用
                                                 ; ( 八进制,十进制 )
     字符      = <任意 ASCII 字符>             ; (  0-177,  0.-127.)
     字母        = <任意 ASCII 字母>             ; (101-132, 65.- 90.)
                                                 ; (141-172, 97.-122.)
     数字        =  <任意 ASCII 十进制数字>      ; ( 60- 71, 48.- 57.)
     控制字符    =  <任意 ASCII 控制字符         ; (  0- 37,  0.- 31.)
                     和删除字符DEL>              ; (    177,     127.)
     回车        =  <ASCII CR, 回车>             ; (     15,      13.)
     换行        =  <ASCII LF, 换行>             ; (     12,      10.)
     空格        =  <ASCII SP, 空格>             ; (     40,      32.)
     制表符     =  <ASCII HT, 制表符>           ; (     11,       9.)
     <">         =  <ASCII 引号>                 ; (     42,      34.)
     回车换行    =  回车 换行

     间隔符      =  空格 / 制表符                ; 语义上,可以把间隔符看成空格

     折行符      =  1*([回车换行] 间隔符)        ; 语义上,可以把间隔符看成空格
                                                 ; 回车换行 => 折行

     特殊字符    =  "(" / ")" / "<" / ">" / "@"  ; 为了在一个词里使用,必须用引号
                 /  "," / ";" / ":" / "/" / <">  ;  引起来
                 /  "." / "[" / "]"              ; 

     分隔符      =  特殊字符 / 折行符 / 注释

     文本        =  <任意字符, 包括单独的回车,    ; => 词, 特殊字符,
                     单独的换行,但是不能包括      ;  注释和被引串
                     回车换行>                     ;  不是文本
                                                   ; 

     词          =  1*<任意字符 除了特殊字符,空格,控制字符>

     被引串      = <"> *(被引文本/转义字符) <">    ; 通常的被引文本或者
                                                   ;   被引字符

     被引文本     =  <任意字符,除了<">,"/",      ; => 可能会折行
                     回车, 还包含折行符>

     域名         =  "[" *(域名文本 / 转义字符) "]"

 

--------------------------------------------------------------------------------------------------------

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章