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 xyz
与 TEXT
匹配。无论您的解析器是否尝试匹配 abc
,词法分析器都独立于解析器运行。
我有这样一个简单的语法:
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 xyz
与 TEXT
匹配。无论您的解析器是否尝试匹配 abc
,词法分析器都独立于解析器运行。