10

このページでは、(私が作成した別のパーサーを使用して)ASTを構築できる場合に、javacのコードジェネレーターを使用してコードを生成する方法について説明します。この手法では、javacのソースコードを編集して、基本的にJavaパーサーをバイパスし、コードジェネレーターに独自のASTを提供できるようにします。これはうまくいくかもしれませんが、私は少しクリーンな方法でそれを行うことを望んでいました。javacのコード生成部分をライブラリとしてプロジェクトに含めたいので、javacのソースの残りの部分を持ち込むことなく、それを使用してコードを生成できます。

javacでこれを行う方法はありますか、それとももっと良いライブラリがありますか?

また、質問のタイトルを自由に変更してください。これ以上良いものは考えられませんでしたが、少しあいまいです。より良いタイトルの編集を提案する場合は、それを受け入れます。

4

2 に答える 2

4

あなたが興味を持っているのは、BCEL(ByteCode Engineering Library)のようなJavaライブラリだと思います。

コンパイラー構築のクラスを受講したときに試してみました。基本的には、定数プールを生成し、名前付きバイトコード命令をメソッドに挿入するための優れたラッパーがあります。完了したら、クラスをロードできます。実行時にカスタムクラスローダーを使用するか、通常の方法でファイルに書き込みます。

BCELを使用すると、少し面倒ですが、構文ツリーからJavaバイトコードに移行するのは比較的簡単ですが、場合によっては、ツリーを構築せずにBCELを使用して生のバイトコードを生成することもできます。

于 2012-07-31T17:29:22.793 に答える
1

もう1つの優れたフレームワークは、バイトコード分析および操作フレームワークであるASMです。

フレームワークを使用したくない場合は、現在(2014)の時点で、ここで説明したように、com.sun.source.tree。*の任意の表現を使用してツリーからバイトコードを生成することはできませ

于 2014-06-29T03:05:07.197 に答える