2012-07-26 10 views
10

This pageは、(私が書いた別のパーサを使って)ASTをビルドすることができるという条件で、javacのコードジェネレータを使ってコードを生成する方法を説明しています。この手法では、基本的にJavaパーサーをバイパスするようにjavacのソースコードを編集して、コード生成プログラムに独自のASTを供給することができます。これはうまくいくかもしれませんが、ややきれいなやり方でやりたいと思っていました。 javacのコード生成部分をプロジェクトにライブラリとして含めたいので、javacのソースの残りの部分を持たずにコードを生成するために使うことができます。ASTからクラスファイルを生成するためのJavaライブラリがありますか?

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

また、質問のタイトルを自由に変更できます。私はより良いものを考えることができませんでしたが、少し曖昧です。あなたがより良いタイトルのための編集を提案すれば、私はそれを受け入れるでしょう。

+0

これは独自のAST、一般的な中間AST、またはjavacで既に使用されているASTですか? (その部分は私には分かりません) –

+0

私自身のAST。私が書いたパーサーでそれを生成しています。 (あいまいさで申し訳ありません) – Hassan

+0

自分のASTであれば、まずjavacで使用されるASTフォームに変換する必要があります。 –

答えて

3

は、私は基本的に、それはのための素晴らしいラッパーを持って、私は、コンパイラの構築にクラスを取ったとき、私は戻ってそれで遊んBCEL(バイトコードエンジニアリングライブラリ)のようなJavaライブラリ

がある中で、あなたが興味を持つかもしれないものだと思います定数プールを生成し、メソッドに名前付きバイトコード命令を組み込んだりすると、実行時にクラスをカスタムクラスローダーでロードするか、通常の方法でファイルに書き出すことができます。

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

+0

私はBCELを確かめます。とにかくJavacのソースはちょっと面倒です。 – Hassan

0

もう1つのクールなフレームワークは、バイトコード解析および操作フレームワークASMです。

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

関連する問題