2013-11-28 57 views
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)

任何人都可以清除这个困惑吗?

回答

1

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

*1(foo bar) 

相同

0*1(foo bar) 

意思的foo序列紧接着出现至少零和至多一个时间,即,该序列是可选bar。由于可选部分是形式文法相当频繁,有他们特殊的语法速记,即

[foo bar] 

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