私は大学で働き、OpenJDKからのハックアップjavac
を助ける機会を得ました。目標はカスタムソースコード(antlrと組み合わせて "私たち"のプログラミング言語用)を読み込み、Javaバイトコードを書き出さないことです。コンパイラはLLVMアセンブラコードを書き出す必要があります。これは私の仕事ですが、プロジェクトは非常に巨大で、どこで何が起こっているのかを理解し始める方法がわかりません。私はコードをデバッグして段階的に調べるように言われましたが、どの部分が最も重要なのかを理解するための短期間のブレークスルーがあれば、良い文書があるかどうかを知りたいと思います。Open JDKをハックする - Javaバイトコードではなく、LLVMアセンブラをエミュレートする
答えて
"myprogram.myprogrlang"は "myprogram.llvm"にあります。
javacを使用する必要はありません。私はあなたがJava/openjdkのコンパイラツールを使いたいと思っていますが、あなたを助けるのではなく、あなたの仕事を難しくしてくれると思います。
私はあなたのプログラミング言語でプログラムを解析する方法、ASTを生成する方法、そしてそのASTデータをLLVMバイトコードまたはアセンブラに変換する方法を学びます。
この場合、javaは必要ありません。
ので:
[1]あなたのプログラミング言語のためのANTLR文法/ルールを学び
[2] LLVMバイトコード/アセンブラを学ぶ
[3] LLVMにANTLRデータ出力をオンにする方法を学びますデータ入力
言語の構文がJavaの影響を受けているため、ASTが作成され、Javaコンパイラを使用してJava言語に相当するものを出力するようになっています。私の検索を通して、私は[Kaleidoscope](http://llvm.org/docs/tutorial/LangImpl3.html)を見つけました。しかし、私の必要があると思われます。しかし、私の上司は、最後に失敗したLLVM APIを呼び出すJava/C++のために。最初のステップは、コードがどのように作成されたかを理解し、LLVM ASMで基本的な "もの"を出そうとすることです(binopsのように) –
さらに、LLVM Assemblerを選択する理由は最適化のためです。 100%最適化されたコードを書く必要はありません:-) –
@Christian Ivicevic。私はANTLRやLLVMで作業していない、時間がない。私の以前の答えは、より一般的な、コンパイラベースのものでした。しかし、あなたは良い軌道にいるようです。中間的なステップとして、LLVM ASMでTEXTプログラムを作成する方法を学び、後でlangからコンパイラを作成することができます。 TEXT LLVM ASMに入れます。 – umlcat
- 1. LLVMバイトコードをJavaバイトコードに変換できますか?
- 2. LLVMバイトコードでループを見つける
- 3. Javaアプリケーション(バイトコードだけでなく)の実行を計測する
- 4. DalvikバイトコードをLLVM IRに変換するには?
- 5. Android Studio Open JDKエラーUbuntu 16.04
- 6. Javaバイトコードを理解する
- 7. ネイティブマシンコードをllvmバイトコードに変換する方法
- 8. open jdkからSun jdkに切り替える
- 9. MAC OSXインテルLLVMアセンブラのバグ(Vorbis OGGローダがクラッシュする)
- 10. JavaでActionScript 3.0/JavaScript DateTimeをエミュレートする
- 11. Java - なぜreadAllBytesが不正なバイトコードを返すのですか?
- 12. は、Javaバイトコード
- 13. Ubuntu 11.10でOracle Java JDK 7(Open JDKではなく)を正しく設定し、参照されたJARファイルでJavaプログラムを実行するにはどうすればよいですか?
- 14. Javaバイトコードを難読化するのではなく、なぜ暗号化しないのですか?
- 15. JavaにIINCバイトコード命令があるのはなぜですか?
- 16. Javaのバイトコードを解釈するもの
- 17. 長いシーケンスオブジェクト(UUIDではなく)をエミュレートするサービス/データベース/技術
- 18. Java JDK WindowsをダウンロードするPythonスクリプト
- 19. ソースコードをJavaバイトコードに変換するユーティリティは何ですか
- 20. Javaバイトコード
- 21. Javaバイトコードでオーバーライドメソッドを識別する方法は?
- 22. Java 8とOpen-JDKを使用してカスタムDNSサーバーを設定する方法は?
- 23. iFrameではなくOpen API
- 24. JavaからLLVMビットコードを解析する
- 25. バイトコードによるJavaデバッグ
- 26. Javaバイトコードによるプログラミング
- 27. C#でExcelをエミュレートする
- 28. アセンブラで奇妙な名前のシンボルを作成するには?
- 29. JavaでAndroid SystemClock.uptimeMillisをエミュレート
- 30. 将来的にJavaバイトコード計測を実行する方法は何ですか?
[1]クールなプロジェクトのように聞こえます [2]現実には大きすぎる大きなプロジェクトのように聞こえます(2つのコンパイラのフレームワークを扱う:Java、LLVM) [3]それ ? – umlcat