Контроль сокращения токенов

Есть ли способ контролировать операцию сокращения токена с помощью ANTLR во время выполнения. Например, у меня есть грамматика ANTLR, которая выглядит следующим образом:

s: ( a | b);
a: WORD;
b: WORD;
WORD: ('a'..'z')+

Где точные возможные значения, относящиеся как к "a", так и к "b", известны во время выполнения, т.е. я хочу во время выполнения решить, следует ли уменьшить WORD до "a" или "b".

1 ответ

Решение

Используйте семантический предикат. Если вы не планируете добавлять действия в правила a и b, этот пример не будет особенно полезен.

s:
   {someBoolFunction();}? a
 | b
;
a: WORD;
b: WORD;
WORD: ('a'..'z')+
Другие вопросы по тегам