5
我想創建'..'
在ANTLR3詞法分析器一個令牌,該令牌將被用來串這樣的表達式ANTLR3詞法優先
a..b // [1]
c .. x // [2]
1..2 // [3]
3 .. 4 // [4]
所以,我已經加入,
DOTDOTSEP : '..'
;
的問題是我已經有一個規則:
FLOAT : INT (('.' INT (('e'|'E') INT)? 'f'?) | (('e'|'E') INT)? ('f'))
;
而在上面的示例[3] 1..2
我作爲一個FLOAT
(我不知道爲什麼,因爲繼第一個.
是另一個.
不是INT,但它是)。
我不知道是否有辦法改變詞法分析規則的優先級,所以DOTDOTSEP
首先匹配,然後FLOAT
。
看起來here看來我輸了,"The rule having the greatest count is the winner.",
,但不知道是否有解決方法。
P.S. INT的定義如下...
fragment DIGIT
: '0'..'9'
;
INT : DIGIT+
;
編輯。 稍微進一步的測試讓我覺得它不像它直接匹配FLOAT
規則那麼簡單。 (我想改變這個問題,但是因爲我現在已經有了答案,所以我不會這樣做)。問題(我相信)仍然存在於詞法分析規則優先級中,所以問題仍然是一樣的。
這讓我非常接近,只是一點點更多的調整需要。我沒有找到的鏈接,但看起來很棒;只是我應該閱讀的東西,所以我現在就要去做。謝謝。 – tjm 2010-10-15 13:59:24
我現在很好,只是幾個筆記給其他任何人可能會來此。在ANTLRWorks v1.4中,解釋器無法處理謂詞,所以在沒有(這會減慢我的速度)的時候看起來有錯誤,而且我必須將'$ settype(TYPE);'更改爲' $ type = TYPE;' – tjm 2010-10-15 16:06:50
@tjm,我稍微編輯了ANTLR示例。它現在是v3兼容嗎? – 2010-10-15 18:01:29