37 votes

Comment générer AST à partir du code source Java?

Pour autant que je sache, la seule façon d'analyser le code source Java dans un AST (Abstract Syntax Tree) est d'utiliser l' API Java Compiler Tree : com.sun.source.tree

J'ai deux questions:

  1. Quels JDK prennent en charge com.sun.source.tree?
  2. Existe-t-il un remplacement portable qui fonctionne pour tous les JDK?

23voto

Brett Daniel Points 1263

Concernant votre deuxième question, il y a des dizaines de Java analyseurs disponibles en plus du Soleil. Voici un petit échantillon:

  • Eclipse est org.eclipse.jdt.de base.dom package.
  • Cuillère sorties une très belle annoté arbre d'analyse avec des informations de type et de la variable de liaison (et utilise Eclipse de l'analyseur à l'interne)
  • ANTLR est un analyseur générateur, mais il y a des grammaires pour Java disponible
  • javaparser (que je n'ai pas utilisé)

Mon meilleur conseil est d'essayer chacun d'eux pour voir ce qui fonctionne le mieux à vos besoins.

8voto

TofuBeer Points 32441

Vous pouvez éventuellement prendre le fichier tools.jar et l'utiliser. javac est open source , vous pouvez donc simplement saisir ce code (en supposant que vous puissiez gérer la licence). Antlr a également des grammaires pour Java.

7voto

Jeremy Raymond Points 2450

J'ai utilisé l'analyseur AST d'Eclipse. Je l'ai trouvé assez bon (eh bien, il faisait partie d'un plug-in Eclipse, il était donc logique de l'utiliser). Voir Exploration de l'ASTParser d'Eclipse .

3voto

Un groupe de travail, simple à utiliser Java Analyseur est... JavaParser. Le projet a été actif depuis quelques années déjà. Alors qu'il était initialement hébergé sur Google code, il est maintenant disponible sur GitHub: https://github.com/matozoid/javaparser

Il est assez simple à utiliser et le nombre de dépendances est petit. Il est également disponible sur Maven.

Il a été utilisé pendant quelques années, de sorte qu'il fonctionne très bien et permet d'analyser également les commentaires, pour changer de l'AST et de régénérer le code.

1voto

Ira Baxter Points 48153

Ce n'est pas la seule façon.

Voir notre Java Front-End, qui est un complet Java analyseur construit sur le Logiciel DMS de la Réingénierie du Toolkit. Il analyse Java, et s'appuie ASTs que les structures de données internes.

Le point de DMS est qu'il fournit une grande variété de supplémentaires utiles machines (attribut des grammaires, des tables de symboles, analyse des flux, de l'AST de manipulation, y compris l'accès et la mise à jour, ainsi que de la source-à-source de transformations), de les analyser et de les transformer en AST dans les résultats et/ou de code source modifié. Si vous obtenez un "simple" Java analyseur (par exemple, JavaCC + Java grammaire) vous sera, à mon humble avis, ne pas être en mesure de faire beaucoup avec elle. DMS permet de faire beaucoup de choses, sans avoir à inventer tous que des machines supplémentaire vous-même.

Si vous ne voulez vraiment pas à utiliser les machines supplémentaire DMS offre, il va de vidage de l'arbre XML.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X