2013-03-20 16 views
1

這裏是我在java.g4見過的規則之一:ANTLR 4 java.g4 - >奇怪的語法規則

DecimalLiteral:( '0' | '1' .. '9' '0'。 .'9'*)IntegerTypeSuffix? ;

爲什麼不寫這樣說:

DecimalLiteral:( '0' .. '9' +)IntegerTypeSuffix? ;

有什麼我失蹤? 感謝您的反饋

問候 菲利普Frankson

回答

4

這樣做的目的是讓0DecimalLiteral,但開始0所有其他整數是OctalLiteral

我更願意用這樣一副規則:

OctalLiteral : '0'+ [1-7] [0-7]* IntegerTypeSuffix?; 
DecimalLiteral : [0-9]+ IntegerTypeSuffix?; 

再推遲無效的八進制整數(其中這對規則仍然會接受這樣的DecimalLiteral)的驗證,在後面的步驟解析過程。

+0

注意:在語法層面上,這是重要的,但在理智的情況下,0分析爲八進制0還是十進制0應該無關緊要:它們很可能最終具有相同的內存中表示。 'DecimalLiteral:'1'..'9''0'..'9'* IntegerTypeSuffix? ;'應該可以 – Martijn 2013-04-12 09:50:49