1

我目前正在開發一個項目來構建一個小型的c編譯器來運行在pmachine上。目前,我開始使用全C語法的剝離版本。現在解析看起來不錯,我用重寫規則來構建AST ,看起來還挺好的。目前,我正處於構建樹語法以生成pmachinecode的階段。我的問題是,Antlr樹語法生成Pmachine代碼?

樹語法是一個行走樹和生成p代碼的可行選擇嗎? (例如我運行一個表達式並返回一個pcode字符串) 或者是在沒有Antlr的情況下手動構建AST的方法來實現這一點的正確方法?

我只是想知道,如果我真的在使用樹語法跟蹤或不。

您的建議將不勝感激。

此致敬禮。

回答

0

如果你的意圖是生成堆棧機P代碼,那麼行走AST可能會很好。不要期望得到的代碼是恆星。

您可以使用AST行爲生成更多關注(抽象或真實)寄存器的代碼,以及大量窺孔優化。 (基本上你生成抽象代碼,但延遲儘可能長的時間發射它;窺孔優化着眼於抽象碼序列,並發現有用optimations併發射那些代替

示例:抽象代碼發射:

PUSH X 
    PUSH Y 
    ADD 

。窺孔優化識別這些併產生(附加說明pmachine) LOAD ACC,X ADD ACC,Y PUSH ACC

這避免了3內存讀取和寫入。如果你pmachine有一個非常緩慢的解釋,你可能不是C是,但隨着它變得更快,這種開銷開始變得重要。

你可以很容易地發明幾十個有用的窺孔優化。

+0

謝謝你的回覆。如果我完全理解你,你說使用Antlr樹步行者是一種可行的方法嗎?併爲代碼生成,我創建單個類每個規則,或者我只是返回一個字符串每棵樹沃克規則的pcode? – Undisputed007 2013-05-01 10:52:31

+0

您可以在此處瞭解有關如何執行此操作的詳細信息:http://stackoverflow.com/a/10544971/120163 – 2013-05-02 15:18:45