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
的子集)是首选。