¿Cómo evitar construir intermedios y nodos AST inútiles con ANTLR3?

Escribí una gramática ANTLR3 subdividida en reglas más pequeñas para aumentar la legibilidad. Por ejemplo

messageSequenceChart:
  'msc' mscHead bmsc 'endmsc' end
;

# Where mscHead is a shortcut to :
mscHead:
  mscName mscParameterDecl? timeOffset? end
  mscInstInterface? mscGateInterface
;

Sé que la función de construcción AST ANTLR incorporada permite al usuario declarar nodos AST intermedios que no estarán en el AST final. Pero, ¿qué pasa si construyes el AST a mano?

messageSequenceChart returns [msc::MessageSequenceChart* n = 0]:
  'msc' mscHead bmsc'endmsc' end
  {
    $n = new msc::MessageSequenceChart(/* mscHead subrules accessors like $mscHead.mscName.n ? */
                                       $bmsc.n);
  }
;

mscHead:
  mscName mscParameterDecl? timeOffset? end
;

La documentación no habla de tal cosa. Por lo tanto, parece que tendré que crear nodos para cada regla intermedia para poder acceder a su resultado de subreglas.

¿Alguien sabe una mejor solución?

Gracias

Respuestas a la pregunta(1)

Su respuesta a la pregunta