2013-12-16 35 views
3

下面是一個簡單的詞法語法:ANTLR詞法分析器 - 可以選擇較短的匹配嗎?

lexer grammar TextLexer; 

@members 
{ 
protected const int EOF = Eof; 
protected const int HIDDEN = Hidden; 
} 

COMMENT: 'comment' .*? 'end' -> channel(HIDDEN); 
WORD: [a-z]+ ; 

WS 
: ' ' -> channel(HIDDEN) 
; 

在大多數情況下,它的表現不如預期,抓出來的話流,而忽略任何通過評論界。 。 。結束。但不總是。例如,如果輸入如下:

quick brown fox commentandending 

它會看到單詞「commentandending」比評價「commentandend」更長的時間。所以它出現了一個令牌「評論和指示」而不是一個令牌「ing」。

有沒有辦法改變這種行爲?

回答

2

此語法將解決ANTLR4問題:

lexer grammar TextLexer; 

COMMENT_BEGIN: 'comment' -> more,pushMode(MCOMMENT); 
WORD_BEGIN: [a-z] -> more, pushMode(MWORD); 

WS: ' ' -> channel(HIDDEN); 

mode MCOMMENT; 
COMMENT: .+? 'end'-> mode(DEFAULT_MODE); 

mode MWORD; 
WORD: [a-z]+ -> mode(DEFAULT_MODE); 
相關問題