2011-06-17 24 views
2

我有機會在大學工作,並幫助從OpenJDK黑客javac。目標是讀取自定義源代碼(對於「我們的」編程語言與antlr結合使用)並且不寫出Java字節碼 - 編譯器應該寫出LLVM彙編代碼。這將是我的任務,但是這個項目非常龐大,我不知道在哪裏或如何開始瞭解那裏正在發生的事情。我被告知要嘗試調試代碼並逐步完成它,但我想知道是否有任何良好的文檔可以幫助我理解哪些部分是最重要的。黑客打開JDK - 發射LLVM彙編程序而不是Java字節碼

+0

[1]聽起來像一個很酷的項目 [2]聽起來像在現實生活中太多的大項目: [3]你確定要處理(處理2編譯器架構的Java,LLVM)它呢? – umlcat

回答

2

你有「myprogram.myprogrlang」到「myprogram.llvm」。

我看不到需要使用/ hack javac。我想你想使用Java/openjdk的編譯工具,但我認爲這隻會讓你的任務變得更加困難,而不是幫助你。

我的建議是採取antlr,學習它如何解析程序語言中的程序,如何生成AST,然後將AST數據轉換爲LLVM字節碼或彙編程序。

在這種情況下,您不需要java。

所以:

[1]瞭解你的編程語言ANTLR語法/規則

[2]瞭解LLVM字節碼/彙編

[3]進一步瞭解如何開啓ANTLR數據輸出到LLVM數據輸入

+0

使用了Java,因爲語言的語法受到Java的影響,我們仍然處於創建AST的開始階段,並且通過java編譯器衝出來輸出語言的Java等價物。通過我的搜索,我發現[Kaleidoscope](http://llvm.org/docs/tutorial/LangImpl3.html),這似乎是我所需要的 - 然而,我的主管告訴我他們已經嘗試編寫這樣一個包裝器對於Java/C++最終調用失敗的LLVM API。對我來說,第一步是瞭解如何創建代碼並嘗試發佈LLVM ASM中的基本「事物」(如binops) –

+0

此外,選擇LLVM Assembler的原因僅僅是爲了優化 - 這在編譯期間會自動發生,所以我不需要編寫100%優化的代碼:-) –

+0

@Christian Ivicevic。我沒有與ANTLR或LLVM一起工作,沒有時間。我以前的答案是更通用的,並基於編譯器。但是,看起來你正處於良好的軌道。作爲中間步驟,您可以學習如何在LLVM ASM中創建TEXT程序,然後再從lang中編譯一個編譯器。到TEXT LLVM ASM中。 – umlcat