antlr4-冲突规则,如何修复

antlr4-冲突规则,如何修复,antlr,antlr4,Antlr,Antlr4,我有以下规则: property : NAME; value : STRING | NUMBER; NUMBER : ('0'..'9')+; NAME : ('a'..'z' | 'A'..'Z' | '0'..'9' | '-' | '_')+; STRING : '"' (~'"')* '"'; 当属性是一个数字时,ANTLR表示: line 1:14 mismatched input '5' expecting NAME 我明白为什么会这样

我有以下规则:

property   : NAME;
value      : STRING | NUMBER;

NUMBER     : ('0'..'9')+;
NAME       : ('a'..'z' | 'A'..'Z' | '0'..'9' | '-' | '_')+;
STRING     : '"' (~'"')* '"';
当属性是一个数字时,ANTLR表示:

line 1:14 mismatched input '5' expecting NAME
我明白为什么会这样。
NUMBER
规则在
NAME
规则之前提到,因此它具有优先权。编号由
编号
规则识别

在ANTLR中处理此问题的常用方法是什么?我可以按如下方式重写
属性
规则,但我不知道这是否是个好主意,因为我引入了冗余

property   : NAME | NUMBER;
重新排序
NUMBER
NAME
也不是一个好主意,因为它会打破
数值
规则(同样的问题)


需要注意的重要事项:我对ANTLR相当陌生,并且还在学习。

是的,
属性:NAME | NUMBER就是这样做的。

谢谢!我必须习惯定义冗余右侧(
NUMBER
NAME
的子集)是首选。