2011-05-03 65 views
8

我想在我的ANTLR語法中解析ISO 8601日期。如何匹配ANTLR 3中的固定數量的字符?

2001-05-03 

我已經在我的語法文件包含以下條目:

date : FOUR_DIGIT ('-')? TWO_DIGIT ('-')? TWO_DIGIT ; 

FOUR_DIGIT 
    : TWO_DIGIT TWO_DIGIT ; 

TWO_DIGIT 
    : DIGIT DIGIT ; 

DIGIT : ('0'..'9') ; 

我知道我可以匹配一個或多個與DIGIT+和零個或多個與DIGIT*

雖然這個工程,是否有一個更簡單的語法來指定我想要完全匹配2 DIGIT

+1

僅僅爲那些未來開車的人而言,我放棄瞭解析器中的解析日期,並決定直接在代碼中解析日期,直到我能夠找到一種本地解析日期的方式,最終不會發生衝突其他術語以'DIGIT'模式開頭。 – 2011-05-08 21:16:11

回答

7

傑羅德·羅伯遜說:

雖然這個作品,是有一個簡單的語法來指定我要嚴絲合縫2位?

不,DIGIT DIGIT是唯一匹配兩個數字的唯一方法。不幸的是,ANTLR確實支持而不是支持類似DIGIT{2}

+0

我刪除了一個月,它沒有給我買任何東西,因爲它與試圖以相同方式限制日子相沖突。 '00'也不是有效月份。 – 2011-05-03 06:02:06

+0

我明白了。是的,這看起來更好:只是將「鬆散」的日期進行匹配,並在稍後階段檢查它是否是有效日期。 – 2011-05-03 06:04:00

+0

也許你知道,但意識到所有4(和2)數字現在被標記爲FOUR_DIGIT(或TWO_DIGIT)。因此,從任何解析器規則中調用DIGIT +都不能匹配四個或兩個連續的數字。 – 2011-05-03 06:18:13