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)表示foo紧跟在后面bar。前面的数字语法表示重复,其中星号将最小出现次数与最大出现次数分开。最小值默认为零。所以

*1(foo bar)

是相同的

0*1(foo bar)

foo表示紧随其后的序列bar至少出现零次且最多出现一次,即该序列是可选的。由于可选部分在形式语法中非常常见,因此它们有一种特殊的速记语法,即

[foo bar]

这也意味着foo紧随其后的序列bar至少出现零次且最多出现一次。句法结构通常意味着什么在这里并不重要,规范并不反映世界,它定义了自己的约定。

于 2014-02-16T15:54:58.403 回答