Предположим, что у меня есть эта простая и бессмысленная грамматика:
propagate : what^ where*;
what : CHAR^;
where : NUMBER -> ^(PLUS NUMBER);
NUMBER : '0'..'9';
CHAR : 'a'..'z';
PLUS : '+';
If it parses a string like a123456789
, it generates an AST like:

What I would to do is to pass the token parsed by what
to where
and create an AST (for the same input) like:

Я пробовал следующим образом:
propagate : w=what^ where[$w.text]*;
what : CHAR^;
where[String s] : NUMBER -> ^(PLUS CHAR[s] NUMBER);
NUMBER : '0'..'9';
CHAR : 'a'..'z';
PLUS : '+';
он работает, если что
это единственный токен, но что, если это дерево?
Это правильный подход?