0
3.8. Optional Sequence:
[RULE]

   Square brackets enclose an optional element sequence:

         [foo bar]

   is equivalent to

         *1(foo bar).

RFC5234の上記のセクションは正しくないようです。

[foo bar]これは、オプションのシーケンス規則が と同等であるだけでなく、 と同等1*1(foo bar)でもあるためだと思います1*1(bar foo)。上記の例は、デフォルト値 0、つまり に一致します0*1(foo bar)

ただし、[] は通常、別の意味を持ちます。一方、私はどちらかまたは[foo bar]どちらかを意味するべきだと思います。(foo)(bar)

誰かが私のためにこの混乱を解消できますか?

4

1 に答える 1

1

RFC は ABNF 文法の構文とセマンティクスを定義し、引用されたテキストはオプションのシーケンス構文のセマンティクスを定義します。定義上正しいです。ABNF フォーム シーケンス グループ内の括弧は、直後に が続くことを(foo bar)意味します。前の数値構文は反復を示し、アスタリスクは最小出現数と最大出現数を区切ります。最小値のデフォルトはゼロです。そうfoobar

*1(foo bar)

と同じです

0*1(foo bar)

は、少なくとも 0 回、多くても 1 回出現する、foo直後の のシーケンスを意味します。つまり、シーケンスはオプションです。bar省略可能な部分は形式的な文法で非常に頻繁に使用されるため、省略可能な部分には特別な省略形の構文があります。

[foo bar]

これは、少なくとも 0 回、多くても 1 回出現するfoo直後のシーケンスを意味します。barここでは、構文構造が通常何を意味するかは問題ではありません。仕様は世界に反映されているのではなく、独自の規則を定義しています。

于 2014-02-16T15:54:58.403 に答える