2 Pis'mennye soglasheniya i obobshchennaya grammatika.
2.1 Uvelichennaya normal'naya zapis' Bekusa-Naura (BNF).
Vse mehanizmy, opredelennye etim dokumentom, opisany kak v obychnoj, tak i v uvelichennoj normal'noj zapisi Bekusa-Naura (BNF), podobnoj ispol'zuemoj v RFC 822 [9]. Razrabotchik dolzhen byt' znakom s takoj formoj zapisi, chtoby ponyat' dannuyu specifikaciyu. Uvelichennaya normal'naya zapis' Bekusa-Naura vklyuchaet sleduyushchie konstrukcii:
-
imya = opredelenie
name = definition - Imya pravila - eto prosto ego nazvanie (ne vklyuchayushchee simvolov "<" i ">"), i otdelyaemoe ot opredeleniya simvolom ravenstva "=". Probel vazhen tol'ko pri vyravnivanii prodolzhayushchihsya strok, ispol'zuemyh dlya ukazaniya opredelenij pravil, kotorye zanimayut bolee odnoj stroki. Nekotorye osnovnye pravila, takie kak SP, LWS, HT, CRLF, DIGIT, ALPHA i t.d, predstavleny v verhnem registre. Uglovye skobki ispol'zuyutsya v opredelenii vsyakij raz, kogda ih prisutstvie oblegchaet ispol'zovanie imen pravil.
-
"literal"
"literal" - Kavychki okruzhayut literal'nyj tekst. Esli ne ustanovleno inogo, etot tekst registro-nezavisim.
-
pravilo1 | pravilo2
rule1 | rule2 - |lementy, otdelyaemye polosoj ("|") yavlyayutsya variantami. Naprimer, "da | net" prinimaet znachenie libo da, libo net.
-
(pravilo1 pravilo2)
(rule1 rule2) - |lementy, vklyuchennye v kruglye skobki obrabatyvayutsya kak odin element. Takim obrazom, "(elem (foo | bar) elem)" dopuskaet posledovatel'nosti leksem "elem foo elem" i "elem bar elem".
-
*pravilo
*rule - Simvol "*", predshestvuyushchij elementu, ukazyvaet povtorenie. Polnaya forma - "<n>*<m>element" oznachaet minimum <n>, maksimum <m> vhozhdenij elementa. Znacheniya po umolchaniyu - 0 i beskonechnost'. Takim obrazom zapis' "*(element)" dopuskaet lyuboe chislo povtorenij (v tom chisle nol'); zapis' "1*element" trebuet po krajnej mere odno povtorenie; a "1*2element" dopuskaet libo odin, libo dva povtoreniya.
-
[pravilo]
[rule] - V kvadratnye skobki zaklyuchayut opcional'nye elementy; "[foo bar]" ekvivalentno "*1(foo bar)".
-
N pravilo
N rule - Tochnoe kolichestvo povtorenij: "<n>(element)" ekvivalentno "<n>*<n>(element)"; to est' prisutstvuet tochno <n> povtorov elementa. Takim obrazom 2DIGIT - nomer iz 2 cifr, a 3ALPHA - stroka iz treh alfavitnyh simvolov.
-
#pravilo
#rule - Konstrukciya "#" prednaznachena, podobno "*", dlya opredeleniya spiska elementov. Polnaya forma - "<n>#<m>element" oznachaet minimum <n>, maksimum <m> vhozhdenij elementa, otdelennyh odnoj ili neskol'kimi zapyatymi (","), i, vozmozhno, linejnym probelom (LWS). |to obychno delaet formu spiskov ochen' prostoj; pravilo tipa "( *LWS element *( *LWS "," *LWS element)) " mozhno predstavit' kak "1#element". Vezde, gde ispol'zuetsya eta konstrukciya, pustye elementy dopuskayutsya, no ne uchityvayutsya pri podschete predstavlennyh elementov. To est' konstrukciya "(element), , (element)" dopuskaetsya, no schitayutsya v nej tol'ko dva elementa. Sledovatel'no tam, gde trebuetsya po krajnej mere odin element, dolzhen prisutstvovat' po krajnej mere odin ne pustoj element. Znacheniya po umolchaniyu - 0 i beskonechnost'. Takim obrazom zapis' "#(element)" dopuskaet lyuboe chislo povtorenij (v tom chisle nol'); zapis' "1#element" trebuet po krajnej mere odnogo povtora nenulevogo elementa; a "1*2element" dopuskaet odin ili dva povtora.
-
; kommentarij
; comment - Tochka s zapyatoj, postavlennaya sprava ot teksta pravila, nachinaet kommentarij, kotoryj prodolzhaetsya do konca stroki. |to - prostoj sposob vklyucheniya poleznyh pometok parallel'no specifikaciyam.
-
podrazumevaya *LWS
implied *LWS - Grammatika, opisannaya etoj specifikaciej osnovana na slovah. Za isklyucheniem sluchaev, v kotoryh otmecheno inoe, linejnyj probel (LWS) mozhet byt' vklyuchen mezhdu lyubymi dvumya smezhnymi slovami (leksemoj ili strokoj citirovaniya), i mezhdu smezhnymi leksemami i razdelitelyami (tspecials), ne izmenyaya interpretaciyu polya. Mezhdu lyubymi dvumya leksemami dolzhen sushchestvovat' po krajnej mere odin razdelitel' (tspecials), tak kak inache oni interpretiruyutsya kak odna leksema.
2.2 Osnovnye pravila.
Sleduyushchie pravila ispol'zuyutsya v prodolzhenie vsej etoj specifikacii dlya opisaniya osnovnyh konstrukcij sintaksicheskogo analiza. Kodirovannyj nabor simvolov US-ASCII opredelen v ANSI X3.4-1986 [21].
OCTET = <lyubaya 8-bitnaya posledovatel'nost' dannyh> CHAR = <lyuboj US-ASCII simvol (oktety 0 - 127)> UPALPHA = <lyuboj US-ASCII simvol verhnego registra "A".."Z"> LOALPHA = <lyuboj US-ASCII simvol nizhnego registra "a".."z"> ALPHA = UPALPHA | LOALPHA DIGIT = <lyubaya US-ASCII cifra "0".."9"> CTL = <lyuboj US-ASCII upravlyayushchij simvol (oktety 0 - 31) i DEL (127)> CR = <US-ASCII CR, vozvrat karetki (13)> LF = <US-ASCII LF, perevod stroki (10)> SP = <US-ASCII SP, probel (32)> HT = <US-ASCII HT, metka gorizontal'noj tabulyacii (9)> <"> = <US-ASCII dvojnye kavychki (34)>
HTTP/1.1 opredelyaet posledovatel'nost' CR LF kak metku konca stroki vo vseh elementah protokola, za isklyucheniem tela ob®ekta (smotrite prilozhenie 19.3 o dopustimyh primeneniyah (tolerant applications)). Metka konca stroki vnutri tela ob®ekta opredelyaetsya sootvetstvyyushchim media tipom, kak opisano v razdele 3.7.
CRLF = CR LF
HTTP/1.1 zagolovki zanimayut neskol'ko strok, esli sleduyushchaya stroka nachinaetsya s probela ili metki gorizontal'noj tabulyacii. Vse nezapolnennoe prostranstvo stroki, vklyuchaya perehod na sleduyushchuyu stroku, imeet tu zhe semantiku, chto i SP.
LWS = [CRLF] 1*( SP | HT )
Pravilo TEXT ispol'zuetsya tol'ko dlya opisatel'nogo soderzhimogo polya i znachenij, kotorye ne prednaznacheny, dlya interpretacii sintaksicheskim analizatorom soobshchenij. Slova *TEXT mogut soderzhat' simvoly iz naborov simvolov (character sets), otlichnyh ot ISO 8859-1 [22], tol'ko kogda oni zakodirovany soglasno pravilam RFC 1522 [14].
TEXT = <lyuboj OCTET, za isklyucheniem CTLs, no soderzhashchij LWS>
SHestnadcaterichnye cifry ispol'zuyutsya nekotorymi elementami protokola.
HEX = "A" | "B" | "C" | "D" | "E" | "F" | "a" | "b" | "c" | "d" | "e" | "f" | DIGIT
Mnogie znacheniya polej zagolovka HTTP/1.1 sostoyat iz slov, razdelennyh LWS ili special'nymi simvolami. |ti special'nye simvoly DOLZHNY nahodit'sya v citiruemoj stroke (quoted string), chtoby byt' ispol'zovannymi v kachestve znacheniya parametra.
token = 1*<lyuboj CHAR za isklyucheniem CTLs ili tspecials> tspecials = "(" | ")" | "<" | ">" | "@" | "," | ";" | ":" | "\" | <"> | "/" | "[" | "]" | "?" | "=" | "{" | "}" | SP | HT
V nekotorye polya HTTP zagolovka mogut byt' vklyucheny kommentarii. Tekst kommentariya okruzhaetsya kruglymi skobkami. Kommentarii dopuskayutsya tol'ko v polyah, soderzhashchih "comment" kak chast' opredeleniya znacheniya polya. Vo vseh drugih polyah kruglye skobki rassmatrivayutsya chast'yu znacheniya polya.
comment = "(" *( ctext | comment ) ")" ctext = <lyuboj TEXT ne vklyuchayushchij "(" and ")">
Stroka teksta analiziruetsya kak odno slovo, esli eto citirovanie, pomechennoe dvojnymi kavychkami.
quoted-string = ( <"> *(qdtext) <"> ) qdtext = <lyuboj TEXT ne vklyuchayushchij <">>
Simvol naklonnoj cherty vlevo ("\") mozhet ispol'zovat'sya kak odnosimvol'nyj mehanizm citirovaniya tol'ko vnutri konstrukcij kommentariya i stroki citirovaniya (quoted-string).
quoted-pair = "\" CHAR