3

コンパイル時に javaCC を使用して独自の言語パーサーを作成するプロジェクトをリファクタリングしています。さまざまなバリエーションの言語が同時に存在する可能性があるため、実行時に jj ファイルから Java ソース コードを動的に生成し、Java ファイルをクラス ファイルにコンパイルしてロードすることにしました。

より効率的に行うために、Javaファイルをメモリ内に生成して、ストリームに生成したいと思います。JavaCC の API Javadoc はあまりアクセスしにくい :)。

どのように進行するのが最善ですか?

4

2 に答える 2

1

kdgregoryが示唆するように、ビルドプロセスを修正する方がおそらく良いでしょう。ただし、この記事では、コンパイラAPIを使用してJavaコードのビットをオンザフライでコンパイルする新しいクラスローダーを作成する方法について説明します。文字列ではなくファイルから読み取るように変更するのはかなり簡単なはずです。

于 2009-10-26T12:50:19.390 に答える
1

Compiler API 別名 JSR-199 (「参考文献」を参照javax.tools) を使用して、メモリで生成されたクラスをコンパイルできます。クラスを拡張javax.tools.SimpleJavaFileObjectして、RAM 内の Java クラスのソース テキストを表すクラスを作成する必要があります。

次の例を確認してくださいRAMResidentJavaFileObject。実際にそれを行っているa の実装があります。

于 2009-10-26T13:06:41.733 に答える