Jump to content

Дополненная форма Бэкуса – Наура.

(Перенаправлено с ABNF )

В информатике основанный расширенная форма Бэкуса-Наура ( ABNF ) — это метаязык, на форме Бэкуса-Наура (BNF), но состоящий из собственного синтаксиса и правил вывода. Основным принципом ABNF является описание формальной системы языка, который будет использоваться в качестве протокола двунаправленной связи . Он определен Интернет-стандартом 68 («STD 68», тип Case sic), который по состоянию на декабрь 2010 г. is RFC   5234 , и он часто служит языком определения протоколов связи IETF . [ 1 ] [ 2 ]

RFC   5234 заменяет собой RFC   4234 , 2234 и 733 . [ 3 ] RFC   7405 обновляет его, добавляя синтаксис для указания строковых литералов с учетом регистра.

Синтаксическая диаграмма ABNF правил ABNF
ABNF Синтаксическая диаграмма правил ABNF

Спецификация ABNF представляет собой набор правил вывода, записанных как

rule = definition ; comment CR LF

где правило — это , нечувствительный к регистру нетерминал , определение состоит из последовательностей символов, которые определяют правило, комментария для документации и заканчиваются возвратом каретки и переводом строки.

Имена правил нечувствительны к регистру: <rulename>, <Rulename>, <RULENAME>, и <rUlENamE> все относятся к одному и тому же правилу. Имена правил состоят из буквы, за которой следуют буквы, цифры и дефисы.

Угловые скобки ( <, >) не требуются для имен правил (как в BNF). Однако их можно использовать для разграничения имени правила при использовании в прозе для распознавания имени правила.

Терминальные значения

[ редактировать ]

Терминалы обозначаются одним или несколькими цифровыми символами.

Цифровые символы могут быть указаны в виде знака процента. %, за которым следует основание ( b = двоичный, d = десятичное число, и x = шестнадцатеричное число), за которым следует значение или объединение значений (обозначается .). Например, возврат каретки определяется %d13 в десятичном или %x0D в шестнадцатеричном формате. Возврат каретки, за которым следует перевод строки, может быть указан с помощью конкатенации как %d13.10.

Литеральный текст указывается с помощью строки, заключенной в кавычки ( "). Эти строки не чувствительны к регистру, а используется набор символов (US-)ASCII. Следовательно, строка "abc" будет соответствовать «abc», «Abc», «aBc», «abC», «ABc», «AbC», «aBC» и «ABC». В RFC 7405 добавлен синтаксис для строк, чувствительных к регистру: %s"aBc" будет соответствовать только «aBc». До этого строку с учетом регистра можно было указать только путем перечисления отдельных символов: чтобы соответствовать «aBc», определение было бы таким: %d97.66.99. Строку также можно явно указать как регистронезависимую с помощью %i префикс.

Операторы

[ редактировать ]

Белое пространство

[ редактировать ]

Пробелы используются для разделения элементов определения; чтобы пробел распознавался как разделитель, он должен быть явно включен. Явная ссылка на один пробельный символ: WSP (линейное пустое пространство) и LWSP предназначен для нуля или более символов пробелов с разрешенными символами новой строки. LWSP определение в RFC5234 является спорным [ 4 ] потому что для образования разделителя между двумя полями необходим хотя бы один пробельный символ.

Определения выравниваются по левому краю. Если требуется несколько строк (для удобства чтения), строки продолжения отделяются пробелами.

Комментарий

[ редактировать ]

; comment

Точка с запятой ( ;) запускает комментарий, который продолжается до конца строки.

Конкатенация

[ редактировать ]

Rule1 Rule2

Правило может быть определено путем перечисления последовательности имен правил.

Для сопоставления строки «aba» можно использовать следующие правила:

  • fu = %x61 ; a
  • bar = %x62 ; b
  • mumble = fu bar fu

Альтернатива

[ редактировать ]

Rule1 / Rule2

Правило может быть определено списком альтернативных правил, разделенных косой чертой ( /).

Чтобы принять правило fu правил или панель , можно создать следующее правило:

  • fubar = fu / bar

Дополнительные альтернативы

[ редактировать ]

Rule1 =/ Rule2

Дополнительные альтернативы могут быть добавлены к правилу с помощью =/ между именем правила и определением.

Правило

  • ruleset = alt1 / alt2
  • ruleset =/ alt3
  • ruleset =/ alt4 / alt5

поэтому эквивалентно

  • ruleset = alt1 / alt2 / alt3 / alt4 / alt5

Диапазон значений

[ редактировать ]

%c##-##

Диапазон числовых значений можно указать с помощью дефиса ( -).

Правило

  • OCTAL = %x30-37

эквивалентно

  • OCTAL = "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7"

Группа последовательности

[ редактировать ]

(Rule1 Rule2)

Элементы можно помещать в круглые скобки для группировки правил в определении.

Для соответствия «ab d» или «ac d» можно построить следующее правило:

  • group = a (b / c) d

Для соответствия «ab» или «cd» можно построить следующие правила:

  • group = a b / c d
  • group = (a b) / (c d)

Переменное повторение

[ редактировать ]

n*nRule

Чтобы указать повторение элемента, используется форма <a>*<b>element используется. Необязательный <a> дает минимальное количество включаемых элементов (по умолчанию 0). Необязательный <b> дает максимальное количество включаемых элементов (по умолчанию — бесконечность).

Использовать *element для нуля или более элементов, *1element для нуля или одного элемента, 1*element для одного или нескольких элементов, и 2*3element для двух или трех элементов, ср. регулярные выражения e*, e?, e+ и e{2,3}.

Конкретное повторение

[ редактировать ]

nRule

Чтобы указать явное количество элементов, используется форма <a>element используется и эквивалентно <a>*<a>element.

Использовать 2DIGIT чтобы получить две числовые цифры, и 3DIGIT чтобы получить три цифры. ( DIGIT определено ниже в разделе « Основные правила ». Также смотрите почтовый индекс в примере ниже.)

Дополнительная последовательность

[ редактировать ]

[Rule]

Для обозначения необязательного элемента эквивалентны следующие конструкции:

  • [fubar snafu]
  • *1(fubar snafu)
  • 0*1(fubar snafu)

Приоритет оператора

[ редактировать ]

Следующие операторы имеют заданный приоритет от самой жесткой привязки к самой слабой привязке:

  1. Строки, формирование имен
  2. Комментарий
  3. Диапазон значений
  4. Повторение
  5. Группировка, необязательно
  6. Конкатенация
  7. Альтернатива

Использование альтернативного оператора с конкатенацией может сбить с толку, поэтому рекомендуется использовать группировку для создания явных групп конкатенации.

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

[ редактировать ]
Синтаксическая диаграмма основных правил ABNF
ABNF Синтаксическая диаграмма основных правил

Основные правила определены в стандарте ABNF.

Правило Формальное определение Значение
АЛЬФА %x41–5A / %x61–7A Прописные и строчные буквы ASCII (A–Z, a–z)
ЦИФРА %x30–39 Десятичные цифры (0–9)
ВЕДЬМА РЫБАТЬ ЦИФРА / «А» / «Б» / «С» / «D» / «Е» / «F» Шестнадцатеричные цифры (0–9, A–F, af)
ЦИТАТА %x22 Двойная кавычка
СП %x20 Космос
ХТАБ %x09 Горизонтальная вкладка
ПОВП СП/ХТАБ Пространство и горизонтальная вкладка
ЛВСП *(WSP/CRLF WSP) Линейный пробел (после новой строки)
VCHAR %x21–7E Видимые (печатные) символы
ЧАР %x01–7F Любой символ ASCII, кроме NUL.
ОКТЕТ %x00–FF 8 бит данных
CTL %x00–1F / %x7F Элементы управления
ЧР %x0D Возврат каретки
НЧ %x0A перевод строки
CRLF ЧР ЛФ Интернет-стандартная новая строка
КУСОЧЕК «0» / «1» Двоичная цифра

Обратите внимание, что на диаграмме основных правил кодировка CHAR2 встроена в char-val , а CHAR3 встроена в prose-val в спецификации RFC. Они названы здесь для ясности на основной синтаксической диаграмме.

Пример почтового адреса (США), приведенный на странице расширенной формы Бэкуса – Наура (ABNF), может быть указан следующим образом:

postal-address   = name-part street zip-part

name-part        = *(personal-part SP) last-name [SP suffix] CRLF
name-part        =/ personal-part CRLF

personal-part    = first-name / (initial ".")
first-name       = *ALPHA
initial          = ALPHA
last-name        = *ALPHA
suffix           = ("Jr." / "Sr." / 1*("I" / "V" / "X"))

street           = [apt SP] house-num SP street-name CRLF
apt              = 1*4DIGIT
house-num        = 1*8(DIGIT / ALPHA)
street-name      = 1*VCHAR

zip-part         = town-name "," SP state 1*2SP zip-code CRLF
town-name        = 1*(ALPHA / SP)
state            = 2ALPHA
zip-code         = 5DIGIT ["-" 4DIGIT]

Подводные камни

[ редактировать ]

RFC 5234 добавляет предупреждение к определению LWSP следующим образом:

Использование этого правила линейных пробелов разрешает строки, содержащие только пробелы, которые больше недопустимы в заголовках сообщений и вызывают проблемы совместимости в других контекстах. Не используйте при определении заголовков сообщений и используйте с осторожностью в других контекстах.

  1. ^ «Официальные стандарты интернет-протокола» . Редактор RFC. 21 февраля 2010 г. Архивировано из оригинала 9 февраля 2010 года . Проверено 21 февраля 2010 г.
  2. ^ Крокер, Д.; Оверелл, П. (январь 2008 г.). «Расширенный BNF для спецификаций синтаксиса: ABNF» (обычный текст) . Редактор RFC. п. 16 . Проверено 21 февраля 2010 г.
  3. ^ «Индекс РФЦ» . Редактор RFC. 19 февраля 2010 г. Архивировано из оригинала 9 февраля 2010 года . Проверено 21 февраля 2010 г.
  4. ^ Ошибки RFC 3096 .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: b0fb4999e29eb03c4b938aa33ce345e9__1721788020
URL1:https://arc.ask3.ru/arc/aa/b0/e9/b0fb4999e29eb03c4b938aa33ce345e9.html
Заголовок, (Title) документа по адресу, URL1:
Augmented Backus–Naur form - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)