JavaCC: я хочу генерировать Java-классы из динамически генерируемых jj-файлов и компилировать их во время выполнения - PullRequest
3 голосов
/ 26 октября 2009

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

Чтобы сделать это более эффективно, я хотел бы сгенерировать java-файлы в памяти для некоторого потока, я полагаю API JavaCC Javadoc не слишком доступен :).

Как лучше всего прогрессировать?

Ответы [ 2 ]

1 голос
/ 26 октября 2009

Вы можете использовать API компилятора, также известный как JSR-199 (см. javax.tools), для компиляции классов, генерируемых в памяти. Вам нужно будет расширить класс javax.tools.SimpleJavaFileObject, чтобы создать класс, который будет представлять исходный текст класса Java в ОЗУ.

Посмотрите на следующий пример , он имеет реализацию RAMResidentJavaFileObject, которая фактически делает это.

1 голос
/ 26 октября 2009

Возможно, вам лучше изменить процесс сборки, как предлагает kdgregory. Но эта статья описывает, как создать новый загрузчик классов, который на лету компилирует биты кода Java с использованием API компилятора. Его должно быть довольно легко изменить для чтения из файлов, а не из строк.

...