Можно ли сделать то, что я пытаюсь здесь? Или, может быть, я ошибаюсь?
arrayDef : { int c = 0; } ('['']' {c++;})+ -> ARRAY /* somehow inject c here */ ;
Почему бы не использовать ChildCount вашего ARRAY узла дерева?
ChildCount
ARRAY
arrayDef : ('[' ']')+ -> ^(ARRAY '['+) ;