最近因爲項目需要,整理Qt代碼, 很多註釋格式不符合Doxygen需要。
需求:
找到源代碼中函數實現地方, 解析之前的註釋, 重新生成代碼註釋
後面2個需求,很好解決。現在就是第一個需求比較難實現。
最先想到的是解析器,第一個想到的就是yacc, 可惜找了半天也沒找到現成的c++的產生式, 估計是c++太複雜了。
不過,找到了下面文檔,對如何做解釋器有了一定了解。
http://www.nobugs.org/developer/parsingcpp/
瞭解下來, 基本上Clang是最強大的開源工具。不過,做一個C++解釋器,明顯超出1個星期的工作量, 自己要找的是一個
學習,研究,加使用能一天就解決的工具。
接下來換一個思路, 看看Perl/Python是否有現成的庫支持。
Python 找到了封裝Clang的庫, 可是很遺憾, 嘗試了2次, 編譯失敗,無法安裝成功, 短期內看來無法解決,只能放棄。
http://eli.thegreenplace.net/2011/07/03/parsing-c-in-python-with-clang/
pycparser 不支持c++
CppHeaderParser 支持頭文件解釋 格式很好,滿足需求, 可惜不支持源代碼。
gcc-xml 滿足要求
找到了工具,接下來的任務就簡單了。
整個實現的核心問題是,如何知道一個文件定義了多少類, 實現了多少函數, 分別在文件的多少行。
能夠獲取這些信息, 接下來就是常規的數據格式化問題了。
ctag 也能解決這個問題, 不過不方便的是ctag 生成的是函數的正則表達式, 使用起來稍微有點麻煩, 沒有行號方便。