У меня следующие правила:
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
, поэтому оно имеет приоритет. Номер распознается правилом NUMBER
.
Как обычно справляются с этим в ANTLR? Я мог бы переписать property
правило следующим образом, но я действительно не знаю, хорошая ли это идея, поскольку я ввожу избыточность.
property : NAME | NUMBER;
Изменение порядка NUMBER
и NAME
тоже не является хорошей идеей, так как это нарушит правило value
для чисел (та же проблема).
Важно отметить: я новичок в ANTLR и все еще учусь.