什么';我在Antlr 3中的语法有什么问题?

什么';我在Antlr 3中的语法有什么问题?,antlr,grammar,Antlr,Grammar,错误是: 错误(208)::4:1:无法匹配以下令牌定义,因为先前的令牌与相同的输入匹配:偶数 如果仔细阅读,错误很明显:偶数无法匹配,因为数将匹配偶数也匹配的内容。而编号的优先级越来越高,因为它是在偶数之前定义的 你能做的是: grammar even_numbers; NUMBER : '0'..'9'; EVEN_NUMBER : '2' | '4' | '6' | '8'; signedEvenNumber : ('+' | '-' | ) NUMBER? EVEN_

错误是:

错误(208)::4:1:无法匹配以下令牌定义,因为先前的令牌与相同的输入匹配:偶数


如果仔细阅读,错误很明显:
偶数
无法匹配,因为
将匹配
偶数
也匹配的内容。而
编号
的优先级越来越高,因为它是在
偶数
之前定义的

你能做的是:

grammar even_numbers;

NUMBER  :   '0'..'9';
EVEN_NUMBER  :  '2' | '4' | '6' | '8';

signedEvenNumber    : ('+' | '-' | ) NUMBER? EVEN_NUMBER;

如果您对编号和偶数重新排序,该怎么办?否则,
NUMBER
总是匹配的。@zerkms的最后一个数字应该是偶数以获得偶数,这与我的建议不矛盾,请重新阅读。AntlWorks可用于调试语法文件。
signedEvenNumber : ('+' | '-' | ) number? EVEN_NUMBER;
number           : ZERO | ODD_NUMBER | EVEN_NUMBER;

ZERO        : '0';
ODD_NUMBER  : '1' | '3' | '5' | '7' | '9';
EVEN_NUMBER : '2' | '4' | '6' | '8';