2011-06-08 1 views
0
analysé

J'ai une règleItère/traitement une liste des Tokens dans ANTLR

((cns=IDENT '->')* IDENT | (cns=IDENT '->')* 'STOP') -> ^(PREFIX ^(EVENTS $cns*) ^(ENDS $procn? STOP?) ) 

Cela fonctionne correctement si cns=IDENT est remplacé par «cns + = IDENT. Dans ce cas, comment puis-je accéder cns en tant que $cns.text.

Répondre

0

Pour stocker tous les IDENT et non seulement le dernier, cns=IDENT doit être remplacé par cns+=IDENT.

Maintenant, si vous explorez le code Java analyseur généré par ANTLR cns est un générique ArrayList où tous les éléments stockés sont de type Token.

Maintenant cette liste peut être itérés en utilisant une boucle et vous pouvez faire quoi que ce soit avec les éléments en utilisant le code comme

$cns.get(index) 

Cet article est de type objet bien et peut être casté (est cette terminologie correcte?) à Token objet pour Token tâches spécifiques.