Есть ли библиотека Java для генерации файлов классов из AST?

Эта страница описывает, как я могу использовать генератор кода в javac для генерации кода, учитывая, что я могу построить AST (используя отдельный синтаксический анализатор, который Я написал). Этот метод включает в себя редактирование исходного кода javac, чтобы в основном обойти парсер Java, чтобы он мог предоставить свой собственный АСТ генератору кода. Это может сработать, но я надеялся сделать это немного чище. Я хочу включить часть генерации кода javac в качестве библиотеки в моем проекте, чтобы я мог использовать ее для генерации кода, не принося с собой остальную часть источника javac.

Есть ли способ сделать это с помощью javac, или есть, возможно, лучшая библиотека?

Кроме того, не стесняйтесь изменять заголовок вопроса. Я не мог придумать лучшего, но это немного двусмысленно. Если вы предложите редактирование лучшего заголовка, я соглашусь с ним.

Ответ 1

Я думаю, что вас может заинтересовать библиотека java, например BCEL (Библиотека по архитектуре ByteCode)

Я играл с ним снова, когда я занимался классом по построению компилятора, в основном, у него есть хорошая оболочка для генерации постоянного пула, вставка инструкций имени байт-кода в метод и еще много чего, тогда, когда вы закончите, вы можете либо загружать класс во время выполнения с помощью специального загрузчика классов или записывать его в файл обычным способом.

С BCEL, должно быть относительно легко перейти из дерева синтаксиса в java-байт-коды, хотя и немного утомительно, но вы можете просто использовать BCEL для генерации необработанного байт-кода без создания дерева в некоторых случаях.

Ответ 2

Еще одна классная среда ASM, анализ байт-кода и структура управления.

Если вы не хотите использовать фреймворк, на данный момент (2014) невозможно генерировать байт-код из дерева, используя произвольные представления com.sun.source.tree. * как сказано здесь.