做者:史寧寧
現在的Clang,不不過一個編譯器前端,同一時候也可以做爲一個庫使用。做爲一個庫使用的時候,可以用它去分析C/C++/ObjectC語言代碼,可以分析源代碼獲得AST,也可以獲取已經分析好的AST,也可以遍歷AST,還可以獲取AST中基本元素的物理源代碼位置。這就是libclang。
libclang提供了一系列的C語言的接口,但是這些接口並不能全然提供存儲在Clang C++ AST中的所有信息,僅僅能提供部分基本信息,但是這些基本信息已經可以知足普通狀況下的使用。主要目的是爲了穩定,並且可以支持開發工具的基本功能。(clang/include/clang-c/Index.h中的凝視原文例如如下: This C interface to Clang will never provide all of the information representation stored in Clang's C++ AST, nor should it: the intent is to maintain an API that is relatively stable from one release to the next, providing only the basic functionality needed to support development tools.)
與此同一時候,libclang支持和python綁定使用,也就是說你可以是用python去調用libclang。clang在clang/bindings/python/這個文件夾如下提供了綁定所需要的文件。眼下這個文件夾如下除了README以外還有三個文件夾:clang,examples,tests。當中clang文件夾如下的文件是綁定所需要的,examples文件夾如下是綁定後測試用的兩個小樣例。test文件夾如下應該是測試需要的一些文件(該文件夾如下文件眼下尚未認真分析)。僅僅需要把綁定文件放到python的庫文件如下(包括clang文件夾),而後確保系統安裝clang到系統文件夾,以後就可以執行樣例了。
libclang帶來的長處很是明顯,可以在很是多不一樣的環境如下輕鬆的用上libclang,僅僅是做爲一個提供了parser功能的庫,很是方便快捷的嵌入本身的工具中,避免了大量的反覆工做。同一時候也不用去分析clang內部的代碼,不需要熟悉內部大量的AST相關的代碼,就可以使用,這可以節省大量的時間。固然,想深挖clang的代碼的同窗,也可以把這裏看成一個突破口。前端
------------------------------------------------------------轉載請註明出處--------------------------------------------------------------------------------------
python