深入研究Clang(三) libclang


作者:史寧寧

如今的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的代碼的同學,也能夠把這里當作一個突破口。

------------------------------------------------------------轉載請注明出處--------------------------------------------------------------------------------------


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM