7
votes

Y a-t-il un analyseur Java pour la langue Java?

Je recherche une bibliothèque Java qui me permet d'analyser un fichier source Java et qui me donne une représentation ast du code.

En réalité, je ne suis intéressé que par les définitions de la classe et de la méthode avec leurs annotations. Je n'ai pas besoin de l'AST du code de méthode.

J'utilise ces informations pour la génération de code. C'est pourquoi je ne peux pas compiler le fichier source d'abord pour obtenir les informations à partir du fichier de classe résultant. Le code ne compilerait pas sans erreur avant de générer des classes supplémentaires.


0 commentaires

6 Réponses :


10
votes

Java 6 prend en charge cela comme une partie natale du compilateur et a des API standard pour celui-ci ( javax.lang.model ). Vous pouvez lire sur elle ici . Il est conçu spécifiquement pour votre cas d'utilisation (c'est-à-dire une génération de code à partir d'annotations et de source).


6 commentaires

Oui, ça a l'air bien. Pouvez-vous me donner un indice Quelle classe est responsable de la lecture du fichier source?


Vous créez un "plugin" compilateur que vous spécifiez à Javac sur la ligne de commande. Je pense que l'interface que vous implémenter est javax.annotation.processing.processor


javax.lang.model est basé sur ce qui est requis pour traiter les annotations, plutôt que d'être un arbre de syntaxe abstraite pour toute la langue. Donc, il a des forfaits, des cours, des méthodes, des champs, des paramètres et des variables, mais pas des expressions ou des déclarations.


C'est dommage. J'ai vraiment besoin d'appeler l'analyseur de mon cadre de génération.


Ce que cela vous permet de faire est de construire votre cadre de génération de code dans Javac lui-même . @Pete: Je suis bien sûr conscient de cela, la question spécifie que les organes de méthodes sont pas requis.


Ma génération de code est composée de différents modèles (non seulement des fichiers Java) que je parle individuellement et que je les placez dans un grand référentiel utilisé par un moteur de modèle Freemarker pour générer beaucoup de code. Mais oui, j'y penserai si je peux mettre tout cela dans Javac.



2
votes

Je pense Netbeans Javaparser pourrait être quelque chose que vous intéresserez.


1 commentaires

Ok, maintenant j'ai construit un pot de ceci. Comment puis-je l'utiliser pour créer un fichier AST à partir d'un fichier source Java?



2
votes

Vous pouvez essayer Javacc avec un fichier de grammaire pour la langue Java. < / p>


0 commentaires

8
votes

antlr ( http://www.antlr.org/ ) a un analyseur pour la langue Java et il suporte également des asts.

Essayez xxx

dans le * .g Fichier (je n'ai pas essayé personnellement);


2 commentaires

Ok, j'ai compilé le java.g mais je ne sais toujours pas comment l'utiliser pour obtenir une AST. Avez-vous un exemple?


Tout ce que je peux offrir à ce stade (j'apprends toujours) est le suivant: options {sortie = ast; } dans le fichier * .g



2
votes

J'ai trouvé le projet Javaparser , qui analyse un seul fichier Java et retourne un puits formé ast.


0 commentaires

2
votes

@Tangens a écrit sur Javaparser mais a référencé un projet maintenant obsolète.

Il y a eu une fourchette en 2011 qui est toujours activement entretenue et également analyser Java 1.7 et 1,8.

Vous pouvez le trouver là-bas: https://github.com/javaparser/javaparser

Disclaimer: Je contribue à ce projet.


0 commentaires