2017-10-07 9 views
0

J'ai écrit un indenteur de code en utilisant ANTLR4 et Java. J'ai réussi à générer le lexeur et l'analyseur. Et l'approche que j'utilise est de parcourir l'arbre d'analyse généré.Indenteur de code utilisant ANTLR 4

ParseTreeWalker mywalker = new ParseTreeWalker(); 
    mywalker.walk(myListener, myTree);  

L'auto-généré * BaseListener a des méthodes comme ci-dessous ...

@Override public void enterEveryRule(ParserRuleContext ctx) { } 

Je suis très nouveau pour ANTLR. Mais, si je comprends bien, j'ai besoin d'étendre * BaseListener et remplacer les méthodes pertinentes et écrire le code à indentation, donc ma question est quelles sont les méthodes que je devrais remplacer pour indenter le fichier de code d'entrée? Ou s'il y a une autre approche que je devrais prendre, s'il vous plaît faites le moi savoir.

Merci!

Répondre

1

Aucune. Vous n'avez pas besoin d'un analyseur pour cette tâche et vous vous limitez au code valide, lorsque vous avez besoin d'un analyseur (vous ne pouvez donc pas reformater du code avec une erreur de syntaxe). Au lieu de cela, prenez le lexer et passez en revue tous les jetons. Gardez un état pour savoir où vous êtes (un bloc, une fonction, peu importe) et indent selon cela.