我有一个像这样简单的语法:
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词法分析器规则会影响这个?我想我误解了一些简单的事情。 : - (
答案 0 :(得分:0)
ANTLR词法分析器规则是贪婪的:匹配最多胜利的规则。因此,在您的情况下,整个输入abc xyz
与TEXT
匹配。如果您的解析器尝试匹配abc
并不重要,则词法分析器独立于解析器运行。