Java Antlr4';输入端没有可行的替代方案';用我的语法

Java Antlr4';输入端没有可行的替代方案';用我的语法,java,grammar,antlr4,rule,Java,Grammar,Antlr4,Rule,我尝试使用antlr4,我有以下语法: grammar Comp; start : 'ca\n'; ID : [a-zA-Z][a-zA-Z0-9]* ; // match identifiers INT : [0-9]+ ; // match integers NEWLINE : '\r'? '\n' ; // return newlines to parser (is end-statement signal) WS : [ \t]+ -

我尝试使用antlr4,我有以下语法:

grammar Comp;

start : 'ca\n';

ID  :   [a-zA-Z][a-zA-Z0-9]* ;      // match identifiers
INT :   [0-9]+ ;         // match integers
NEWLINE : '\r'? '\n' ;     // return newlines to parser (is end-statement signal)
WS  :   [ \t]+ -> skip ; // toss out whitespace
OTHER : (~'\n')* '\n' ;
如果我发送lexem'ca\n'它可以工作。 但根据规则:

start : 'ca' '\n';

lexem未被识别。为什么?


谢谢你的帮助

lexer将始终匹配它能找到的最长规则。问题在于规则“OTHER”将整个字符串捕获为一个标记。其他将捕获“ca\n”,这将阻止“start”规则捕获“ca”和“\n”的单独标记。
start : 'ca' NEWLINE;