Является ли альтернативный оператор в ABNF коммутативным?

Является ли альтернативный оператор (/) в расширенной форме Бэкуса-Наура коммутативно?

Например, это s = a / b такой же как s = b / a?

0 ответов

Я не нашел никаких первоисточников по BNF или ABNF, которые явно указывают / семантика, когда обе стороны будут давать действительные совпадения. Они также не ссылаются на контекстно-свободные грамматики и их допущение для недетерминизма. Если кто-нибудь знает уточняющие ссылки, пожалуйста, поделитесь.

РЕДАКТИРОВАТЬ: Ответ Тони указывает на RFC 3501 от 2003 года определяет семантику чередования ABNF, по крайней мере, как это используется в этом документе.

RFC 5234: расширенный BNF для синтаксических спецификаций: ABNF (2008)

Введение контрастирует с BNF и ABNF (с акцентом, добавленным здесь):

На протяжении многих лет модифицированная версия формы Бэкуса-Наура (BNF), названная Augmented BNF (ABNF), была популярна среди многих спецификаций Интернета. Это уравновешивает компактность и простоту с разумной представительной силой. В начале существования Arpanet каждая спецификация содержала свое собственное определение ABNF. Это включало спецификации электронной почты, RFC733 и затем RFC822, которые стали общими цитатами для определения ABNF. Текущий документ разделяет эти определения, чтобы разрешить выборочную ссылку.

Различия между стандартными BNF и ABNF заключаются в правилах именования, повторении, альтернативах, независимости от порядка и диапазонах значений.

"Выборочная ссылка" и "независимость от порядка" могут относиться к семантике чередования, но неясно.

RFC 822: Стандарт для формата текстовых сообщений ARPA Internet (1982)

Если я что-то упустил, как не указано в цитируемых RFC / семантика тоже. Раздел 2.2 уклоняется от проблемы.

2.2. ПРАВИЛО1 / ПРАВИЛО2: АЛЬТЕРНАТИВЫ

Элементы, разделенные косой чертой ("/"), являются альтернативами. Поэтому "foo / bar" будет принимать foo или bar.

Различные определения правил показывают, что они признают практическую важность избежания двусмысленности. Например, вот как RFC 822 определяет optional-field и его зависимости:

 optional-field =
             /  "Message-ID"        ":"   msg-id
             /  "Resent-Message-ID" ":"   msg-id
             /  "In-Reply-To"       ":"  *(phrase / msg-id)
             /  "References"        ":"  *(phrase / msg-id)
             /  "Keywords"          ":"  #phrase
             /  "Subject"           ":"  *text
             /  "Comments"          ":"  *text
             /  "Encrypted"         ":" 1#2word
             /  extension-field              ; To be defined
             /  user-defined-field           ; May be pre-empted

 extension-field =
               <Any field which is defined in a document
                published as a formal extension to this
                specification; none will have names beginning
                with the string "X-">

 user-defined-field =
               <Any field which has not been defined
                in this specification or published as an
                extension to this specification; names for
                such fields must be unique and may be
                pre-empted by published extensions>

Синтаксис и семантика предложенного международного алгебраического языка конференции ACM-GAMM в Цюрихе (Backus 1958)

BNF происходит от обозначения IAL. В статье вводится ̅o̅r "металингвистическая связка", которая интуитивно связана с /, Тем не менее, он также уклоняется от неоднозначной проблемы выбора и, по-видимому, просто использует ее осторожно.

Рекомендация

Из-за неустановленной семантики я предлагаю рассматривать каждое возможное совпадение в alternation Правило как действительное. Если грамматика не разработана тщательно, чтобы избежать неоднозначности, эта интерпретация может привести к нескольким действительным деревьям разбора для одного и того же ввода. Адресация неоднозначных разборов по мере их возникновения безопаснее, чем продвигаться вперед с непреднамеренно допустимым деревом разбора.

В качестве альтернативы, если у вас есть влияние на то, как указывается грамматика, вы можете рассмотреть нотацию с более четкой семантикой. Например, грамматика синтаксического анализа при разборе: основанная на распознавании синтаксическая основа (Ford 2004) дает альтернативы детерминированной приоритетной семантике выбора (выигрыши с крайним левым соответствием).

Некоторые RFC разъясняют это в явном виде, например, в RFC3501 IMAPv4, включая спецификацию PEG-подобного поведения в разделе 9 RFC 3501:

В случае альтернативных или необязательных правил, в которых более позднее правило перекрывается с более ранним правилом, правило, которое перечислено ранее, ДОЛЖНО иметь приоритет. Например, "\Seen", когда он анализируется как флаг, является именем флага \ Seen, а не расширением флага, даже если "\ Seen" может быть проанализировано как расширение флага. Некоторые, но не все, примеры этого правила указаны ниже.

Я не знаю, насколько распространены такие неоднозначности (ха), хотя. Многие другие RFC, на которые я смотрел (в последние дни я реализовывал библиотеку синтаксического анализатора ABNF), просто оставляют ее неопределенной. Многие грамматики RFC ABNF однозначны (например, RFC8259 (JSON)); однако многие из них неоднозначны (например, RFC5322 (Интернет-сообщения)) и требуют исправлений для работы с анализатором, сохраняющим неоднозначность:-(

Другие вопросы по тегам