Пустые постановки в RFC 5234 (расширенный BNF)

Допускает ли расширенный BNF (как указано в RFC 5234) совпадения с пустой строкой?

Из чтения грамматики самого расширенного BNF (раздел 4, ABNF Definition of ABNF) мне кажется, что единственный способ - использовать пустые кавычки (""):

empty-rule = ""

or

empty-alternative = some-rule-1 / some-rule-2 / ""

в то время как синтаксис, как

invalid-empty-rule = 

не допускается.

Я прав? Почему это так?


person Adam Badura    schedule 09.02.2014    source источник


Ответы (1)


Правило с пустой правой частью явно недопустимо, так как имеем:

rule           =  rulename defined-as elements c-nl

и elements не может соответствовать пустой последовательности. (Это подтверждается фактическим текстом, который определяет elements как «одно или несколько имен правил или спецификаций терминала».)

Мне кажется, что и "", и 0FOO (где FOO — любой нетерминал) допустимы elements, и единственная возможная интерпретация любого из них — пустая последовательность. С другой стороны, я не думаю, что когда-либо видел какую-либо из этих формулировок, поскольку очень легко указать, что элемент является необязательным, и гораздо более нормально писать [NAME], чем определять NAME с альтернативой, включающей пустая строка.

person rici    schedule 09.02.2014
comment
Почему-то я не понимал, что сделать элемент необязательным тоже подойдет. - person Adam Badura; 10.02.2014
comment
А еще я не видел 0FOO как вариант. Тем не менее, он чувствует себя НАМНОГО ХУЖЕ, чем "". - person Adam Badura; 10.02.2014