2012-07-26 14 views
10

This page describe cómo puedo usar el generador de código en javac para generar código dado que puedo construir un AST (usando un analizador separado que escribí). La técnica consiste en editar el código fuente de javac para evitar básicamente el analizador de Java, de modo que uno pueda suministrar su propio AST al generador de código. Esto podría funcionar, pero esperaba hacerlo de una manera ligeramente más limpia. Quiero incluir el código que genera parte de javac como una biblioteca en mi proyecto para que pueda usarlo para generar código, sin traer consigo el resto de la fuente de javac.¿Hay una biblioteca Java para generar archivos de clase desde un AST?

¿Hay alguna manera de hacer esto con javac, o quizás hay una mejor biblioteca?

Además, siéntase libre de cambiar el título de la pregunta. No podría pensar en una mejor, pero es un poco ambigua. Si sugiere una edición para un título mejor, lo aceptaré.

+0

¿Es esta su AST, una AST intermedia común, o la AST que ya usa javac? (Esa parte no es evidente para mí.) –

+0

Mi propia AST. Lo estoy generando con un analizador que escribí. (Perdón por la ambigüedad) – Hassan

+0

Si es su propio AST, primero tendrá que traducir al formulario AST utilizado por javac. –

Respuesta

3

creo que lo que usted podría estar interesado en una biblioteca de Java como BCEL (ByteCode Biblioteca de ingeniería)

He jugado un poco con él cuando yo tomé una clase de construcción de compiladores, básicamente, tiene un bonito envoltorio para generando el grupo constante, insertando instrucciones de bytecode nombradas en un método y otras cosas, luego, cuando hayas terminado, puedes cargar la clase en tiempo de ejecución con un cargador de clases personalizado o escribirla en un archivo de la forma habitual.

Con BCEL, debería ser relativamente fácil pasar del árbol de sintaxis a los códigos byte de Java, aunque es un poco tedioso, pero puede usar simplemente BCEL para generar el bytecode sin construir el árbol también en algunos casos .

+0

Sin duda miraré a BCEL. La fuente de Javac es un poco desordenada de todos modos. – Hassan

0

Otro marco genial es ASM, un análisis de código byte y un marco de manipulación.

En caso de que no desee utilizar un marco, a partir de ahora (2014), no es posible generar bytecode desde un árbol utilizando las representaciones arbitrarias de com.sun.source.tree. * Como dijo here.

Cuestiones relacionadas