2017-08-11 2 views
1

Je suis en train d'imprimer l'arbre généré dans ce format:ANTLR4: Comment imprimer un arbre dans un format pratique

picture

donc je dois avoir un ассеss aux informations sur les nœuds d'un arbre. Je produis comme suit:

public static void main(String[] args) throws Exception{ 
    CharStream cs = new ANTLRFileStream("test.txt"); 
    ExampleLexer lexer = new ExampleLexer(cs); 
    TokenStream tokens = new CommonTokenStream(lexer); 
    ExampleParser parser = new ExampleParser(tokens); 
    ParseTree tree = parser.mainRule(); 
} 

Je peux utiliser tree.getChild(int childNumber) méthode pour accéder aux sous-arbres et tree.getChild(int childNumber).getText() méthode pour obtenir leur texte, mais je ne peux pas obtenir des informations sur les noeuds (j'ai besoin de connaître le type du jeton (si un noeud est un jeton) et le nom de la règle (s'il ne s'agit pas d'un jeton)). Comment puis je faire ça?

Merci à l'avance.

Répondre

0

Le type du noeud est "codé" comme la classe de noeud ... Ceux qui représentent réellement un Token sont un TermninalRuleImpl.

Vous pouvez accéder à la Token par le getSymbol(), donc quelque chose comme ça devrait fonctionner:

if(node instanceof TerminalNodeImpl) { 
    Token representedToken = ((TerminalNodeImpl) node).getSymbol(); 
} 

Si vous avez besoin du type de jeton que vous pouvez le vérifier en utilisant la méthode getType() du Token qui cracher un nombre défini comme constante dans votre classe d'analyseur.

+0

merci pour la réponse :) – sibstudent1