Контроль сокращения токенов
Есть ли способ контролировать операцию сокращения токена с помощью 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')+