Лексеры ANTLR поддерживают рекурсию, как @BartK умело указывает в своем посте, но вы увидите только один токен в парсере. Если вам нужно интерпретировать различные части в этом токене, вы, вероятно, захотите обработать его внутри синтаксического анализатора.
IMO, вам лучше сделать что-нибудь в парсере:
variable: DOLLAR LBRACE id variable id RBRACE;
Сделав что-то подобное, вы увидите все необходимые части и сможете построить AST или иным образом обработать.