J'ai écrit une grammaire ANTLR3 subdivisée en règles plus petites pour augmenter la lisibilité. Par exemple:Comment éviter les intermédiaires et les noeuds AST inutiles avec ANTLR3?
messageSequenceChart:
'msc' mscHead bmsc 'endmsc' end
;
# Where mscHead is a shortcut to :
mscHead:
mscName mscParameterDecl? timeOffset? end
mscInstInterface? mscGateInterface
;
Je sais que la fonctionnalité intégrée de construction ANTLR AST permet à l'utilisateur de déclarer les nœuds AST intermédiaires qui ne seront pas en finale AST. Mais que faire si vous construisez l'AST à la main?
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 documentation ne parle pas d'une telle chose. Il semble donc que je devrais créer des nœuds pour toutes les règles intermédiaires afin de pouvoir accéder au résultat de leurs sous-règles.
Est-ce que quelqu'un connaît une meilleure solution?
Merci.
Génial! Ça marche ! : D Vous m'avez fait économiser beaucoup de temps! –
@Julio, c'est bon d'entendre ça, et je vous en prie. –
Un autre problème! http://stackoverflow.com/questions/6047127/ignore-tokens-in-the-token-characters Je crois en toi: p –