可选的序列规则说明

时间:2013-11-28 09:10:58

标签: abnf

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)

任何人都可以为我清除这种困惑吗?

1 个答案:

答案 0 :(得分:1)

RFC定义了ABNF语法的语法和语义,引用的文本定义了可选序列语法的语义。根据定义,它是正确的。 ABNF中的括号形成序列组,(foo bar)表示foo后紧跟bar。前面的数字语法表示重复,其中星号将最小出现次数与最大出现次数分开。最小默认值为零。所以

*1(foo bar)

相同
0*1(foo bar)

意味着foo后面紧跟bar的序列至少出现零且最多一次,即序列是可选的。由于可选部分在形式语法中非常频繁,因此它们有一种特殊的简写语法,即

[foo bar]

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