2011-06-17 7 views
2

私は大学で働き、OpenJDKからのハックアップjavacを助ける機会を得ました。目標はカスタムソースコード(antlrと組み合わせて "私たち"のプログラミング言語用)を読み込み、Javaバイトコードを書き出さないことです。コンパイラはLLVMアセンブラコードを書き出す必要があります。これは私の仕事ですが、プロジェクトは非常に巨大で、どこで何が起こっているのかを理解し始める方法がわかりません。私はコードをデバッグして段階的に調べるように言われましたが、どの部分が最も重要なのかを理解するための短期間のブレークスルーがあれば、良い文書があるかどうかを知りたいと思います。Open JDKをハックする - Javaバイトコードではなく、LLVMアセンブラをエミュレートする

+0

[1]クールなプロジェクトのように聞こえます [2]現実には大きすぎる大きなプロジェクトのように聞こえます(2つのコンパイラのフレームワークを扱う:Java、LLVM) [3]それ ? – umlcat

答えて

2

"myprogram.myprogrlang"は "myprogram.llvm"にあります。

javacを使用する必要はありません。私はあなたがJava/openjdkのコンパイラツールを使いたいと思っていますが、あなたを助けるのではなく、あなたの仕事を難しくしてくれると思います。

私はあなたのプログラミング言語でプログラムを解析する方法、ASTを生成する方法、そしてそのASTデータをLLVMバイトコードまたはアセンブラに変換する方法を学びます。

この場合、javaは必要ありません。

ので:

[1]あなたのプログラミング言語のためのANTLR文法/ルールを学び

[2] LLVMバイトコード/アセンブラを学ぶ

[3] LLVMにANTLRデータ出力をオンにする方法を学びますデータ入力

+0

言語の構文がJavaの影響を受けているため、ASTが作成され、Javaコンパイラを使用してJava言語に相当するものを出力するようになっています。私の検索を通して、私は[Kaleidoscope](http://llvm.org/docs/tutorial/LangImpl3.html)を見つけました。しかし、私の必要があると思われます。しかし、私の上司は、最後に失敗したLLVM APIを呼び出すJava/C++のために。最初のステップは、コードがどのように作成されたかを理解し、LLVM ASMで基本的な "もの"を出そうとすることです(binopsのように) –

+0

さらに、LLVM Assemblerを選択する理由は最適化のためです。 100%最適化されたコードを書く必要はありません:-) –

+0

@Christian Ivicevic。私はANTLRやLLVMで作業していない、時間がない。私の以前の答えは、より一般的な、コンパイラベースのものでした。しかし、あなたは良い軌道にいるようです。中間的なステップとして、LLVM ASMでTEXTプログラムを作成する方法を学び、後でlangからコンパイラを作成することができます。 TEXT LLVM ASMに入れます。 – umlcat

関連する問題