2013-11-28 59 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。什麼語法結構通常在這裏並不重要,規範並沒有反映世界,它定義了它自己的約定。