ANTLR输入不匹配

时间:2015-07-06 19:51:51

标签: antlr4

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

grammar mygrammar;

the_rule : 'abc' 'xyz' ;

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

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

(the_rule abc xyz)

然而,我添加了以下词法分析器规则,我认为这意味着“除了w之外的任何东西”:

TEXT : ~[w]+ ;

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

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

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

1 个答案:

答案 0 :(得分:0)

ANTLR词法分析器规则是贪婪的:匹配最多胜利的规则。因此,在您的情况下,整个输入abc xyzTEXT匹配。如果您的解析器尝试匹配abc并不重要,则词法分析器独立于解析器运行。