深入研究Clang(二)Abstract Syntax Tree

要想深入的研究Clang,抽象語法樹是必須要完全理解的。關於抽象語法樹的資料,wiki介紹的很詳細:Abstract syntax tree

如果覺的這個英文文檔不是太好理解,也可以找點別的中文資料,但是這個文檔還是要認真讀的。AST作為語法分析的輸出,是接下來的語義分析和生成中間代碼所需要的基礎。現在基於AST可以進行程序分析和程序轉換,程序分析就不說了。程序轉換,現在Clang下面已經有一些額外的工具:比如clang-modernize實現的就是對C++程序中可以使用C++11的地方進行轉換,轉換成在這些地方使用C++11特性的程序,等於直接在程序上進行的修改,是一個source-to-source的轉換工具。

同時,AST也是編譯器構建符號表的基礎。

在這裡先提出對AST一定要熟悉,因為它是編譯器的幾大基礎之一,尤其是前端中的一個很重要的一部分,如果連AST也不熟悉,後續的所有工作都無法進行下去了。同時,也是為了後續從工具clang-modernize入手去深入研究Clang打下基礎。在另外一篇博文中曾經提到過打算深入研究Clang的方法,就是從這些工具入手,不斷的去挖掘Clang的源碼。因為工具本身的代碼量不大,方便閱讀代碼和調試,而從這些代碼入手去挖掘Clang的代碼,既不會覺的面對的東西太大無法入手,也比較容易看到成果。

這種方法的思路是不同的從外圍去入手,然後漸進的向核心逼近,等於是農村包圍城市的策略。如果能耐得住寂寞,同時也有大把的整塊時間,可以直接去hack Clang的那些庫的源碼,這樣更直接,但是會很累。

關於Clang AST,有一個官方文檔:Introduction to the Clang AST

通過對這個文檔的閱讀,可以熟悉Clang的AST是什麼樣的,它和其他的編譯器產生的AST是有不同點的,這些需要在閱讀文檔的過程中進行把握。而不應該想當然的去以為AST都是相同的。

2014年1月7日


推薦閱讀:

有關LLVM(https://github.com/yejinlei/about-compiler)
LLVM中如何獲取程序的控制流圖CFG?
LLVM相比於JVM,有哪些技術優勢?
[Debug] Clang / LLVM 關於continue語句的二三事

TAG:LLVM | Clang | ChrisLattner |