2010-04-20 60 views
1

我認爲ANTLR詞法分析器正在將我在範圍表達式"1...3"中的嘗試當作浮點數處理。表達"x={1...3}"是走出詞法分析器作爲"x={.3}"當我用下面的標記定義:ANTLR lexing越來越困惑'...'並漂浮

FLOAT 
    : ('0'..'9')+ ('.' '0'..'9'+)? EXPONENT? 
    | ('.' '0'..'9')+ EXPONENT? 
    ; 

AUTO : '...'; 

當我改變FLOAT只檢查整數,像這樣:

FLOAT : ('0'..'9')+; 

則表達式"x={1...3}"被正確標記。任何人都可以幫我解決這個問題嗎?

謝謝!

+0

是表達式「x = {1..3}」還是「x = {1 ... 3}」。你有兩種寫法。 – 2010-04-20 19:19:32

+0

表達式是「x = {1 ... 3}」,只是一個錯字。 – 2010-04-20 19:51:23

回答

1

我認爲詞法分析器會將您的第一個時間段放入FLOAT標記中,然後剩下的兩個時間段不會生成您的AUTO標記。您將需要一個謂詞來確定句點是否應該是浮動或自動令牌的一部分。

那麼,爲什麼你使用三個句點而不是兩個,必須使用兩個句點作爲「範圍」,語言應該確定該句點是否屬於浮動的一部分或基於下面的「字符」範圍。

您可能需要查看有關如何爲不同規則構建謂詞的定義ANTLR參考。

希望這可以幫助您找到完成任務的正確方法。

1

WayneH點擊您的問題。你已經允許浮動格式爲「.3」(沒有前導0)。所以,詞法分析器識別最後一個。和3並認爲它是一個浮點數。結果它沒有看到三個點。它看到兩個點和一個浮點。

對於語言來說,禁止這種浮點格式並要求小數點左邊至少有一位數(即使是0)是很常見的。我相信對語法的改變可以解決你的問題。

可能有一種方法可以用謂詞修復它,但我還沒有花足夠的時間與ANTLR一起看到明顯的方式。