0

我在寫一個使用Flex和Bison的迷你Fortran編譯器。到目前爲止,我已經完成了詞法和語法分析。我在類型檢查中進行語義分析,現在我必須選擇一個IR。我的目標機器是MIPS。所以我想要基於MIPS IAS的最終代碼生成。所以我認爲一個好的IR是四倍的。但我想介紹一些優化。出於這個原因,我構建了一個DAG結構(使用散列表)。 IR有兩條路徑:四倍或DAG,然後四倍。我的Fortran編譯器的中間代碼生成:DAG或四倍

如果我將DAG作爲IR使用,我如何使用backpatching方法來處理語句?與四倍,它會很容易。另一方面,DAG更抽象。我將被迫將其轉換爲四倍。我知道。我的恐懼是回補。

回答

0

我相信你應該專注於高層次的設計,因爲擔心低層次的細節。此外,目前的編譯器不使用四元組,而是使用SSA(Static Single Asignment)。爲了最終生成代碼,或許看看LCC編譯器,它們使用一種簡單的方法通過樹匹配發出本地最優代碼。

的一種方式欺騙是剛剛發出高級語言(如C),並留下繁重到它的編譯器(和你的便攜免費;-)。

我不知道Usenet組comp.compilers是否以某種形式存在,但是它的FAQ將是我的第一站。雖然可能有可怕的日期。

+0

我知道SSA..LLVM GCC等等。我正在爲我的類項目構建一個編譯器。它在實施方面是開放的。對於最終的代碼,我必須在MIPS和x86之間進行選擇。我會和MIPS一起去,因爲我知道它非常好。我對事物的順序感到困惑。我應該立即使用四邊形,然後使用DAG,還是立即使用DAG?在第二種情況下,我怎樣才能使用返修? – gon1332