2012-02-14 9 views
2

私はJasminコードにコンパイルし、それを組み立ててJavaバイトコードコンパイラをJavaに書いています。私は、ソースコードファイルがJavaライブラリクラスを参照して使用できるように意図して作成しています(文字列や印刷などにはかなり必要です)。私の問題は、これをどうやって行うのか。JavaからJavaへのバイトコードコンパイラ:Javaクラスライブラリの情報を取得するには?

これまでは、Javaインストールフォルダ内のテキストファイルに保持されているすべてのライブラリクラスのリストへの参照を使用しています(パッケージと名前をリストするだけです)。私はパーサー/型チェッカーのコーディングにこれを使用しましたが、ライブラリクラスが使用されたときに型チェッカーが型検査を行うことができなかったので、これは理想的ではありませんでした。

ライブラリクラスのメソッドを呼び出す場合は、完全なメソッドシグネチャを渡す必要があるため、実際にはコード生成に取り掛かっているので、実際には問題になります。

私は、どのように進歩するかについて人々のアドバイスが何であるかをさまよっていました。 1つの方法は、すべてのクラスとそのすべてのパラメータと戻り値の型のリストを作成することです。これは明らかに非常に時間がかかり、恐らくあまりにも非現実的です。可能な他のよりエレガントなアプローチがありますか?

おかげで、 ウィル

P.S.私はこれをコード化するためにPythonを使用しています。ソリューションでJavaコードを使用する必要がある場合は、サブプロセスとして実行できます。

答えて

0

これをさらに調べると、Java Reflectionを使用すると可能なようです。私はこの記事に返信して、私がいかに成功したかをあなたに知らせてくれるでしょう。

+0

はい、私は結局このオプションを使いました。私はメソッド/フィールドなどの名前を取り、クラスが属するクラスを返します(存在する場合)小さなJavaプログラムを作成しました。 Java Refletion APIを通じてすべて可能です。 –

0

すでにJavaからバイトコードへのコンパイラがあります。そして、JVM Python。あなたの実際の目標は何ですか?

メソッド/戻り値の型のコレクションを作成するには "非常に時間がかかる"と思いますか?どのように時間がかかっているのは「極端に」ですか?それは実生活でどのように動作するかのようなもので、javapを使用しても、クラスファイルからその情報を引き出すのは特に時間がかかりません。それ以外には、.classファイルから直接情報を引き出すためのASM、BCEL、その他のライブラリがありますが、javapは簡単なテキスト出力を提供し、必要に応じて適切です。

シンボルを使用するには、シンボルテーブルが必要です。利用可能なものを入手する唯一の方法は、利用可能なものを保存することです。あなたが思っているよりも速く、小さくなります。特に、簡略表記を使用する場合はそうです。

+0

私の主な目標は、Java言語のサブセットにいくつかの追加機能を追加することです。 私はすべてのメソッドのリストを作成できると思います。私は今、重要な図書館パッケージからのクラスだけを含めることができます。 –

関連する問題