antlr: как не принимать префикс слова как часть токена - PullRequest
0 голосов
/ 18 июня 2020

Я бы хотел, чтобы 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 что-нибудь потом» желательно, но я не хочу, чтобы целое слово, такое как «Автомобиль», разделялось. Есть ли способ обойтись? Спасибо

...