ANTLR 不匹配的输入

ANTLR mismatched input

我有这样一个简单的语法:

grammar mygrammar;

the_rule : 'abc' 'xyz' ;

WS  :  [ \t\r\n\u000C]+ -> channel(HIDDEN) ;

当我用 the_rule() 解析文本 "abc xyz" 时,我得到了预期的字符串树表示:

(the_rule abc xyz)

但是,然后我添加以下词法分析器规则,我认为这意味着 "anything except for a w":

TEXT : ~[w]+ ;

现在,当我用 the_rule() 解析文本 "abc xyz" 时,出现错误:

line 1:0 mismatched input 'abc xyz' expecting 'abc'

为什么 TEXT 词法分析器规则会影响这个?我想我误解了一些简单的事情。 :-(

ANTLR 词法分析器规则是贪婪的:匹配最多的规则获胜。因此,在您的情况下,整个输入 abc xyzTEXT 匹配。无论您的解析器是否尝试匹配 abc,词法分析器都独立于解析器运行。