Как использовать правила лексера с одинаковым началом?
Я пытаюсь использовать два похожих правила лексера (с одинаковым началом):
TIMECONSTANT: ('0'..'9')+ ':' ('0'..'9')+;
INTEGER : ('0'..'9')+;
COLON : ':';
Вот пример моей грамматики:
grammar TestTime;
text : (timeexpr | caseblock)*;
timeexpr : TIME;
caseblock : INT COLON ID;
TIME : ('0'..'9')+ ':' ('0'..'9')+;
INT : ('0'..'9')+;
COLON : ':';
ID : ('a'..'z')+;
WS : (' ' | '\t' | '\r' | '\n') {$channel=HIDDEN;};
Когда я пытаюсь разобрать текст:
12:44
123 : abc
123: abc
Первые две строки анализируются правильно, третья -выдает ошибку. По какой-то причине '123 :' ANTLR анализирует как TIME (, хотя это не )...
Итак, можно ли сделать грамматику с такими лексемами?
Наличие таких правил необходимо в моем языке для использования блоков case -и констант даты и времени. Например на моем языке можно написать:
case MyInt of
1: a := 01.01.2012;
2: b := 12:44;
3:....
end;