7

Java バイトコードを他のプログラミング言語に変換する方法/ツール/プロジェクトを探しています。それができない場合は、少なくとも構造化表現 (XML など) に変換します。当然、理想的にはオープンソースです。

「バイトコード操作および分析フレームワーク」であるASMを見てきました。他の表現への変換はサポートしていませんが、そのようなプロジェクトの優れた基盤のようです。悲しいことに、ユーザー ページにリストされているプロジェクトのどれもそれに近づきません。

4

4 に答える 4

7

ASM には、基本的にバイトコードの完全な構造を提供できるツリー API があります。それを使用したり、訪問者 API を使用して XML やその他の形式で出力したりするのは非常に簡単なようです。しかし、それが何の用途かはわかりません。

Java に戻すのは逆コンパイラの仕事であり、Jad のようなものでも問題ありません。ただし、a) ソースからバイトコードへの変換中に情報が失われる、b) 複数のソースが同じバイトコードを生成する可能性があるというあいまいさがあるため、これは困難です。

実際にバイトコードから別の高水準言語に直接移行したい場合、逆コンパイルが難しいのと同じ理由で、別の言語への変換がさらに悪いことを除いて、包括的かつ意味のあるものにするのは困難です。

Java ソースから別の言語のソースに移動したい場合は、このJava-to-Python コンバーター のように、以前に行われています。Antlrや組み込みの Java コンパイラ ツール、Project Jackpotなどを使用して Java を AST に変換できるので、多少簡単です。

于 2009-03-12T14:10:11.470 に答える
2

BCEL(バイトコードエンジニアリングライブラリ)を試してください。ビジターインターフェイスを実装できます。これを使用して、必要なもの(別の言語のソースコード、カスタムAST、xmlなど)を生成できます。

私はそれを大学のプロジェクトで使用しました。そこでは、Javaソースコードを処理するプログラム分析フレームワークを、Javaバイトコードに対しても機能するものに変更しました。そのタスクには、分析フレームワークの内部AST表現用のノードの生成が含まれていました。

また、

あなたが言及した「ASM」プロジェクトのドキュメントを簡単にざっと読みました。いくつかのvistiorクラスを定義しているようです。あなたはそれらを使ってあなたがやりたいことをすることもできるはずです。

ビジターパターンに慣れていない場合は、こちらの説明を確認してください。また、まだ読んでいない方は、「GangofFour」の本をお読みください。

于 2009-03-12T16:50:11.197 に答える
1

クロスコンパイラを探しているようです。プロジェクトxmlvmは知っていますが、使用したことはありません。多分これはあなたのニーズに合っています。

于 2009-03-12T13:04:22.140 に答える
1

バイトコードをネイティブコードに変換するgcjを試すことができます。

python/groovy/ruby のような言語に変換したい場合は、おそらくそれらの言語で直接 JVM に書き込むことを検討してください (これはまさにあなたが探しているものではないことに気付きました)。

おそらく、このEclipse Byte Code Outline Viewerのようなものからいくつかの例を拾い集めてください。

最後に、ある低レベル言語 (バイトコード) から別の言語への変換は非常に難しく、正確性が問題になります。

于 2009-03-12T13:12:35.973 に答える