我有機會在大學工作,並幫助從OpenJDK黑客javac
。目標是讀取自定義源代碼(對於「我們的」編程語言與antlr結合使用)並且不寫出Java字節碼 - 編譯器應該寫出LLVM彙編代碼。這將是我的任務,但是這個項目非常龐大,我不知道在哪裏或如何開始瞭解那裏正在發生的事情。我被告知要嘗試調試代碼並逐步完成它,但我想知道是否有任何良好的文檔可以幫助我理解哪些部分是最重要的。黑客打開JDK - 發射LLVM彙編程序而不是Java字節碼
回答
你有「myprogram.myprogrlang」到「myprogram.llvm」。
我看不到需要使用/ hack javac。我想你想使用Java/openjdk的編譯工具,但我認爲這隻會讓你的任務變得更加困難,而不是幫助你。
我的建議是採取antlr,學習它如何解析程序語言中的程序,如何生成AST,然後將AST數據轉換爲LLVM字節碼或彙編程序。
在這種情況下,您不需要java。
所以:
[1]瞭解你的編程語言ANTLR語法/規則
[2]瞭解LLVM字節碼/彙編
[3]進一步瞭解如何開啓ANTLR數據輸出到LLVM數據輸入
使用了Java,因爲語言的語法受到Java的影響,我們仍然處於創建AST的開始階段,並且通過java編譯器衝出來輸出語言的Java等價物。通過我的搜索,我發現[Kaleidoscope](http://llvm.org/docs/tutorial/LangImpl3.html),這似乎是我所需要的 - 然而,我的主管告訴我他們已經嘗試編寫這樣一個包裝器對於Java/C++最終調用失敗的LLVM API。對我來說,第一步是瞭解如何創建代碼並嘗試發佈LLVM ASM中的基本「事物」(如binops) –
此外,選擇LLVM Assembler的原因僅僅是爲了優化 - 這在編譯期間會自動發生,所以我不需要編寫100%優化的代碼:-) –
@Christian Ivicevic。我沒有與ANTLR或LLVM一起工作,沒有時間。我以前的答案是更通用的,並基於編譯器。但是,看起來你正處於良好的軌道。作爲中間步驟,您可以學習如何在LLVM ASM中創建TEXT程序,然後再從lang中編譯一個編譯器。到TEXT LLVM ASM中。 – umlcat
- 1. 從我的llvm傳遞中發射llvm-ir字節碼
- 2. IntelliJ可以反彙編第三方(或JDK)的java字節代碼而不使用相應的源代碼嗎?
- 3. 是否可以將LLVM字節碼轉換爲Java字節碼?
- 4. 打印x86彙編,而不是從ExecutionEngine
- 5. 寫llvm字節碼
- 6. LLVM教程OCaml編譯彙編程序錯誤
- 7. 爲8085開發基於java的彙編程序
- 8. 發送字節而不是字符串的聊天程序
- 9. 彙編程序和C編程linux -m32(從彙編程序中的寄存器中的字符字節)
- 10. 打開JDK 7和Oracle JDK 7 Soap客戶端
- 11. 反彙編Java JIT編譯好的本地字節碼
- 12. 彙編代碼打開文件錯誤
- 13. 打開優化讀取彙編代碼
- 14. Java - 用戶映射節打開錯誤
- 15. 忽略彙編程序函數的彙編程序關鍵字
- 16. LLVM彙編字符串常量語法
- 17. 如何反彙編ABC字節碼?
- 18. java套接字發送字符串,而不是字節
- 19. 「彙編」與「彙編程序」
- 20. LLVM-GCC彙編:LDR語法
- 21. 什麼linux發行編程和黑客?
- 22. 不明白彙編程序
- 23. 使用LLVM字節代碼庫(而不是原始目標文件)
- 24. 使用Java編程字節碼
- 25. 開發iphone應用程序而不是蘋果開發人員
- 26. Java字節碼等價物ILASM /反彙編
- 27. 編碼:TypeError:寫入()參數必須是str,而不是字節
- 28. 編程打開黑莓設備選項
- 29. 從Java小程序打開「字節數組文件」
- 30. 開始黑莓應用程序開發
[1]聽起來像一個很酷的項目 [2]聽起來像在現實生活中太多的大項目: [3]你確定要處理(處理2編譯器架構的Java,LLVM)它呢? – umlcat