1
這裏是我在java.g4見過的規則之一:ANTLR 4 java.g4 - >奇怪的語法規則
DecimalLiteral:( '0' | '1' .. '9' '0'。 .'9'*)IntegerTypeSuffix? ;
爲什麼不寫這樣說:
DecimalLiteral:( '0' .. '9' +)IntegerTypeSuffix? ;
有什麼我失蹤? 感謝您的反饋
問候 菲利普Frankson
這裏是我在java.g4見過的規則之一:ANTLR 4 java.g4 - >奇怪的語法規則
DecimalLiteral:( '0' | '1' .. '9' '0'。 .'9'*)IntegerTypeSuffix? ;
爲什麼不寫這樣說:
DecimalLiteral:( '0' .. '9' +)IntegerTypeSuffix? ;
有什麼我失蹤? 感謝您的反饋
問候 菲利普Frankson
這樣做的目的是讓0
是DecimalLiteral
,但開始0
所有其他整數是OctalLiteral
。
我更願意用這樣一副規則:
OctalLiteral : '0'+ [1-7] [0-7]* IntegerTypeSuffix?;
DecimalLiteral : [0-9]+ IntegerTypeSuffix?;
再推遲無效的八進制整數(其中這對規則仍然會接受這樣的DecimalLiteral
)的驗證,在後面的步驟解析過程。
注意:在語法層面上,這是重要的,但在理智的情況下,0分析爲八進制0還是十進制0應該無關緊要:它們很可能最終具有相同的內存中表示。 'DecimalLiteral:'1'..'9''0'..'9'* IntegerTypeSuffix? ;'應該可以 – Martijn 2013-04-12 09:50:49