Имеет ли значение порядок правил в ABNF?
Имеет ли значение порядок правил в расширенной форме Бэкуса-Наура?
В частности, есть
a = b
b = c
а также
b = c
a = b
тот же самый?
Как насчет
a = b
a =/ c
а также
a =/ c
a = b
?
Было бы возможно иметь правило, используя =/
без правила с тем же именем, используя =
?
1 ответ
Вид. Хотя это может не иметь никакого значения в отношении результата, вы всегда должны определять свои наборы правил таким образом, чтобы правила, от которых он зависит, уже были определены. Когда вы сопоставляете элементы с определенными правилами, порядок правил, конечно, влияет на результат.
ABNF не позволяет вам переопределять наборы правил на более позднем этапе, поэтому он всегда должен быть одинаковым. (ABNF не является языком программирования, правила не являются переменными)
a = b
b = c
Пример выше не имеет смысла. В этом коротком примере очевидно, что это должно означать, но в длинном RFC эти строки могут быть разделены стеной текста.
b = c
a = b
Это то же самое?
Да, правила не являются переменными - но я бы порекомендовал второе обозначение / порядок
a = b
a =/ c
=/
определяет инкрементную альтернативу или как определенно определено в RFC:
То есть исходное правило может соответствовать одной или нескольким альтернативам, а более поздние определения правил добавляются к набору альтернатив.
Есть случаи, когда это может не иметь значения, но не всегда так.
В вашем случае это так же, как написание
a = b / c
=/
не должен прийти раньше =
по соображениям читабельности (и логики).
Возможно ли иметь правило, использующее =/, без правила с тем же именем, использующего =?
Не на самом деле нет. a /= b
будет просто a = b
затем.