ANTLR词法分析器 - 可以选择较短的匹配吗?

问题描述:

下面是一个简单的词法语法: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”。

有没有办法改变这种行为?

此语法将解决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);