2009-10-31 18 views
6

Estoy buscando una biblioteca java que me permita analizar un archivo fuente java y eso me da una representación AST del código.¿Hay un analizador de Java para el lenguaje Java?

En realidad, solo estoy interesado en las definiciones de clases y métodos con sus anotaciones. No necesito el AST del código del método.

Estoy usando esta información para la generación de código. Es por eso que no puedo compilar el archivo fuente primero para obtener la información del archivo de clase resultante. El código no se compilará sin errores hasta que genere algunas clases adicionales.

Respuesta

2

Encontré el proyecto javaparser, que analiza un solo archivo Java y devuelve un AST bien formado.

9

Java 6 admite esto como una parte nativa del compilador y tiene API estándar para él (javax.lang.model). Puede leer en él here. Está diseñado específicamente para su caso de uso (es decir, generación de código a partir de anotaciones y fuente).

+0

Sí, esto se ve bien. ¿Puede darme una pista sobre qué clase es responsable de leer el archivo fuente? – tangens

+0

Crea un "complemento" de compilación que especifique para javac en la línea de comando. Creo que la interfaz que implementa es 'javax.annotation.processing.Processor' – Ramon

+1

javax.lang.model se basa en lo que se requiere para procesar las anotaciones, en lugar de ser un árbol de sintaxis abstracta para todo el lenguaje. Por lo tanto, tiene paquetes, clases, métodos, campos, parámetros y variables, pero no expresiones o declaraciones. –

2

creo NetBeans Javaparser podría ser algo que va a interesar.

+0

OK, ahora construí un frasco de esto. ¿Cómo puedo usarlo para crear un AST a partir de un archivo fuente java? – tangens

2

Usted puede tratar JavaCC con un archivo de gramática para el lenguaje Java.

8

ANTLR (http://www.antlr.org/) tiene un analizador para el lenguaje Java y también es compatible con AST.

tratar

options { 
    output=AST; 
} 

en el archivo * .g (no he probado personalmente);

+0

Bien, compilé Java.g pero todavía no sé cómo usarlo para obtener un AST. ¿Tienes un ejemplo? – tangens

+0

Todo lo que puedo ofrecer en este momento (sigo aprendiendo) es: 'options { output = AST; } ' en el archivo * .g –

2

@tangens escribió sobre JavaParser pero se refirió a un proyecto ahora desactualizado.

Hubo un fork en 2011 que todavía se mantiene activamente y ahora también analiza Java 1.7 y 1.8.

Usted puede encontrar allí: https://github.com/javaparser/javaparser

responsabilidad: Soy un contribuyente a ese proyecto.

Cuestiones relacionadas