2009-05-01 41 views
3

如果我想修改或添加自己的擴展到C,並將它們添加到GCC C編譯器,我需要做什麼?我不想提出對語言的更改,我想知道C編譯器是如何工作的。如何向GCC添加基於C語言

我已經看了一下GCC的源代碼,它看起來好像Objective-C被實現爲一個簡單的解析器,該解析器生成引用修改後的運行時庫的代碼,然後生成所有基於C的引用它使用常規的C編譯器。我沒有深入研究過,所以我可能不在正確的軌道上。

舉例來說,我想將我自己的關鍵字添加到Objective-C中,只是爲了好玩。我想添加一些似乎易於實現的內容,例如@assert。所有我想要的是@assert打電話,我會加入到Objective-C的運行時函數:

objc_runtime_assert (__FILE__, __LINE__, expression, "string version of expression"); 

顯然,我可以實現這個和函數調用和宏觀反正,但我想獲得的理解C源代碼的解析和編譯階段,也許我可以將自己的擴展添加到我自己使用的語言中。

我一直關注的源代碼是指「樹」,並且有許多執行操作或從這些樹中獲取信息的宏。

有沒有任何文檔可以深入解釋這類事情?

+0

我不能幫你,但看看http://en.wikipedia.org/wiki/Abstract_syntax_tree – 2009-05-01 11:29:29

回答

2

這些樹很可能是abstract syntax trees (AST),任何編譯器書都會教這個。 The dragon book是非常經典的一個,我在課堂上使用了Robin Hunter的The essence of compilers,ISBN 0-13-727835-7。您還應該能夠通過一些很好的搜索術語(編譯器設計,AST,詞法分析,自上而下的分析,自下而上的分析,語義分析,LL,LR)找到來自不同高校的材料

1

這取決於你是如何做的 - 但你可能想尋找D編程語言的GCC實現 - GCD。這是一項正在進行的工作,但它是GCC框架中實施的完整語言,沒有GCC團隊內部(如果有的話)的認可。 GCD的經驗可能是有益的。