Есть ли библиотека Java для генерации файлов классов из AST?
Эта страница описывает, как я могу использовать генератор кода в javac для генерации кода, учитывая, что я могу построить AST (используя отдельный синтаксический анализатор, который Я написал). Этот метод включает в себя редактирование исходного кода javac, чтобы в основном обойти парсер Java, чтобы он мог предоставить свой собственный АСТ генератору кода. Это может сработать, но я надеялся сделать это немного чище. Я хочу включить часть генерации кода javac в качестве библиотеки в моем проекте, чтобы я мог использовать ее для генерации кода, не принося с собой остальную часть источника javac.
Есть ли способ сделать это с помощью javac, или есть, возможно, лучшая библиотека?
Кроме того, не стесняйтесь изменять заголовок вопроса. Я не мог придумать лучшего, но это немного двусмысленно. Если вы предложите редактирование лучшего заголовка, я соглашусь с ним.
Ответы
Ответ 1
Я думаю, что вас может заинтересовать библиотека java, например BCEL (Библиотека по архитектуре ByteCode)
Я играл с ним снова, когда я занимался классом по построению компилятора, в основном, у него есть хорошая оболочка для генерации постоянного пула, вставка инструкций имени байт-кода в метод и еще много чего, тогда, когда вы закончите, вы можете либо загружать класс во время выполнения с помощью специального загрузчика классов или записывать его в файл обычным способом.
С BCEL, должно быть относительно легко перейти из дерева синтаксиса в java-байт-коды, хотя и немного утомительно, но вы можете просто использовать BCEL для генерации необработанного байт-кода без создания дерева в некоторых случаях.
Ответ 2
Еще одна классная среда ASM, анализ байт-кода и структура управления.
Если вы не хотите использовать фреймворк, на данный момент (2014) невозможно генерировать байт-код из дерева, используя произвольные представления com.sun.source.tree. * как сказано здесь.