注意:这是一个自我回答的问题,旨在提供有关ANTLR用户最常犯错误之一的参考.
当我测试这个非常简单的语法时:
grammar KeyValues;
keyValueList: keyValue*;
keyValue: key=IDENTIFIER '=' value=INTEGER ';';
IDENTIFIER: [A-Za-z0-9]+;
INTEGER: [0-9]+;
WS: [ \t\r\n]+ -> skip;
Run Code Online (Sandbox Code Playgroud)
通过以下输入:
foo = 42;
Run Code Online (Sandbox Code Playgroud)
我最终得到以下运行时错误:
第1行:第6行不匹配输入'42'期望INTEGER
第1行:8输入不匹配';' 期待'='
为什么不承认ANTLR 42
作为INTEGER
在这种情况下?
它应该匹配模式[0-9]+
就好了.
如果我颠倒了定义的顺序INTEGER
并且IDENTIFIER
定义它似乎有效,但为什么顺序首先重要?