Соглашения по нотации и общая грамматика. Расширенные BNF — КиберПедия 

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

Соглашения по нотации и общая грамматика. Расширенные BNF

2017-11-27 222
Соглашения по нотации и общая грамматика. Расширенные BNF 0.00 из 5.00 0 оценок
Заказать работу

Все механизмы, специфицированные ниже, описаны с использованием обычного текста и расширенных форм Бахуса­Наура BNF (BackusNaur Form; см. RFC-822). Пользователи должны быть знакомы с этой нотацией для понимания данной спецификации. Расширение BNF включает в себя следующие конструкции.

name = definition

Имя правила не требует помещения в угловые скобки. Некоторые базовые правила записываются прописными буквами, например, SP, LWS, HT, CRLF, DIGIT, ALPHA и пр.

literal

Двойные кавычки используются для выделения символьного текста.

rule1 | rule2

Элементы, разделенные вертикальной чертой, (|) являются альтернативными, например, "yes | no" допускает yesили no (да или нет).

(rule1 rule2)

Элементы, помещенные в круглые скобки, рассматриваются как один элемент. Так, "(elem (foo | bar) elem)" допускают последовательности "elem foo elem" и "elem bar elem".

*rule

Символ "*", предшествующий элементу, указывает на повторение. Полная форма "<n>*<m>element" указывает как минимум на <n> и как максимум <m> повторений элемента. Значения по умолчанию равны 0 и бесконечности, так что запись "*(элемент)" допускает любое число повторений, включая ноль; "1*element" требует, по меньшей мере, один; а "1*2element" допускает один или два элемента.

[rule]

В квадратные скобки заключаются опционные элементы; [foo bar] эквивалентно *1(foo bar).

n rule

Специальный повтор: <n>(элемент) эквивалентно <n>*<n>(элемент); то есть, точно <n>(element). Таким образом, 2DIGIT является 2-значным числом, а 3ALPHA представляет собой строку из трех буквенных символов.

#rule

Конструкция "#" определена подобно "*", для описания списка элементов. Полная форма имеет вид "<n>#<m>element", отмечая, по меньшей мере <n> и по большей — <m> элементов, отделенных друг от друга одной или более запятыми (",") и опционно строчным пробелом (LWS — Linear White Space). Это делает обычную форму списков очень простой. Запись (*LWS элемент (*LWS элемент *(*LWS "," *LWS элемент)) может быть представлена, как 1#element.

Всюду, где используется эта конструкция, допускаются нулевые элементы, но они не учитываются при подсчете элементов. То есть, допускается запись "(элемент), (элемент)", но число элементов при этом считается равным двум. Следовательно, там, где необходим хотя бы один элемент, должен присутствовать, по крайней мере, один ненулевой элемент. Значениями по умолчанию являются 0 и бесконечность, таким образом "#элемент" допускает любое число, включая нуль; "1#элемент"требует, по меньшей мере один, а "1#2элемент" допускает один или два.

; комментарий

Точка с запятой, смещенная вправо от линейки текста, открывает комментарий, который продолжается до конца строки. Это простой способ включения замечаний в тексты спецификаций.

implied *LWS

Грамматика, описанная в данной спецификации, ориентирована на слова. Если не оговорено обратного, строчный пробел (LWS) может быть заключен между любыми двумя соседними словами (лексема или заключенная в кавычки строка), и между смежными лексемами (token) и разделителями (TSpecials) без изменения интерпретации поля. По крайней мере один разграничитель (TSpecials) должен присутствовать между любыми двумя лексемами, так как они иначе будут интерпретироваться как одна.

Основные правила

Следующие правила используются практически во всей спецификации для описания основных конструкций разбора (парсинга).

OCTET = <любая 8битовая последовательность данных>
CHAR = <любой символ USASCII (октеты 0 127)>
UPALPHA = <любая прописная буква USASCII "A".."Z">
LOALPHA = < любая строчная буква USASCII "a".."z">
ALPHA = UPALPHA | LOALPHA (строчная или прописная буква)
DIGIT = <любая цифра USASCII "0".."9">
CTL = <любой управляющий символ USASCII (октеты 0 31) и DEL (127)>
CR = <USASCII CR>, возврат каретки (13)
LF = <USASCII LF, перевод строки (10)>
SP = <USASCII SP, пробел (32)>
HT = <USASCII HT, знак горизонтальной табуляции (9)>
<"> = <USASCII двойная кавычка (34)>

HTTP/1.1 определяет последовательность CR LF как маркер конца для всех протокольных элементов, за исключением тела элемента. Маркер конца строки в пределах тела объекта определен соответствующим типом среды.

CRLF = CR LF

HTTP/1.1 заголовки могут занимать несколько строк, если продолжение строки начинается с пробела или символа горизонтальной табуляции. Все строчные пробелы имеют ту же семантику, что и обычный пробел (SP).

LWS = [CRLF] 1*(SP | HT)

Правило TEXT используется только для содержимого описательных полей и значений, которые не предполагается передавать интерпретатору сообщений. Слова *TEXT могут содержать символы из символьного набора, не совпадающего с ISO 88591 [7.22], только когда они закодированы согласно правилам RFC-1522 [7.14].

TEXT = <любой OCTET за исключением CTL, но включая LWS>

В некоторых протокольных элементах используются шестнадцатеричные цифровые символы.

HEX = "A" | "B" | "C" | "D" | "E" | "F" | "a" | "b" | "c" | "d" | "e" | "f" | DIGIT

Многие значения полей заголовков HTTP/1.1 состоят из слов, разделенных LWS или специальными символами. Эти специальные символы должны представлять собой строки, заключенные в кавычки, чтобы использоваться в качестве значения параметра.

Token = 1*<любой CHAR за исключением CTL или tspecials>
Tspecials = "(" | ")" | "<" | ">" | '@"

| "," | ";" | ":" | "\" | <">

| "/" | "[" | "]" | "?" | "="

| "{" | "}" | SP | HT

Комментарии могут быть включены в некоторые поля HTTP заголовков, при этом текст комментария заключается в скобки. Комментарии допустимы только для полей, содержащих comment как часть описания поля. В других полях скобки рассматриваются как элемент содержимого поля.

Комментарий = "(" *(ctext | комментарий) ")"

ctext = <любой TEXT, исключая "(" и ")">

Строка текста воспринимается как одно слово, если она помещена в двойные кавычки.

quotedstring = (<"> *(qdtext) <">)

qdtext = <любой TEXT, исключая <">>

Символ обратная косая черта ("\") может использоваться вместо кавычки внутри закавыченного текста или в структурах комментариев.

quotedpair = "\" CHAR


Поделиться с друзьями:

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.008 с.