@ Ира, спасибо за ответ. Я попробую это завтра и дам вам знать, как это происходит. Скорее всего, мне не придется обходить дерево и менять узлы, но это возможно. Бизнес-требования пока не ясны, поэтому я не уверен, как мне реализовать динамическую генерацию кода. Это может быть комбинация нижеприведенных техник ...
1) Создание дерева AST, сохранение в БД в виде XML, при необходимости получить обратно XML, сгенерировать дерево AST, при необходимости изменить его, внести некоторые изменения, преобразовать дерево AST в источник Java, скомпилировать источник Java в класс, загрузить объект в память в время выполнения и использовать его.
2) Реализовать класс Java, который расширяет интерфейс. Реализовать новый Impl с помощью RAD IDE ... Конвертировать это дерево Impl AST, сохранить в db как xml, при необходимости получить обратно как xml, сгенерировать дерево AST, Преобразовать дерево AST в Java исходный код, скомпилируйте исходный код Java в класс с помощью реализации родительского интерфейса, загрузите объект в память с помощью шаблона Factory (который может загружать либо оригинальный IMPL, либо новый IMPL, созданный на этом шаге)
Я новичок в ANTLR, поэтому довольно сложно понять, как это работает ... Я надеялся, что когда я конвертирую Java в дерево AST, я могу легко его сериализовать ... Я также надеялся, что должно быть просто способ получить обратно сериализованный объект AST и создать дерево AST в памяти и легко создать исходный код Java из него. Я ненавижу тот факт, что не так много примеров для его использования.