Я бы хотел, чтобы antlr распознал этот шаблон
int A.B.C.
символ '.' в AB C. должен быть необязательным, и в AB C могут быть пробелы, поэтому я придумал эту грамматику (упрощенную, чтобы показать проблему):
grammar Test;
root: INT abcLabel intAlpha? ;
intAlpha: INT | INT_ALPHA;
abcLabel: ABC;
ABC: A PERIOD? WS? B PERIOD? WS? C PERIOD?;
INT_ALPHA: INT ALPHA;
ALPHA: [a-zA-Z];
INT: DIGIT+;
DIGIT: [0-9];
PERIOD: '.';
fragment A: [aA];
fragment B: [bB];
fragment C: [cC];
WS: [ \t\r\n]+ -> skip;
Это отлично работает для "12 AB C 23 "как и ожидалось, но, к сожалению, это также работает для" 12 AB Car 23 ", что неожиданно. Он распознается как «12 AB C», опуская «ar 23» в конце. Теперь я ожидаю, что частичное совпадение сработает, поэтому распознавание «12 AB C что-нибудь потом» желательно, но я не хочу, чтобы целое слово, такое как «Автомобиль», разделялось. Есть ли способ обойтись? Спасибо