我正在尋找一個基於Windows的庫,可用於解析一堆C文件以列出全局變量和局部變量。全局和局部變量可以使用typedef聲明。輸出(即全局和局部變量的列表)然後可以用於後處理(例如用新名稱替換變量名稱)。解析C文件
是否有這樣的圖書館?
我正在尋找一個基於Windows的庫,可用於解析一堆C文件以列出全局變量和局部變量。全局和局部變量可以使用typedef聲明。輸出(即全局和局部變量的列表)然後可以用於後處理(例如用新名稱替換變量名稱)。解析C文件
是否有這樣的圖書館?
一些方法可供選擇:
備用你可以使用公衆lex specification和yacc grammar使用lex and yacc(或他們的親友和野牛)編寫自己的文章。
可能矯枉過正,但有一個完整的ANSI C解析器與Boost.Spirit寫: http://spirit.sourceforge.net/repository/applications/c.zip
也許你能夠模擬,以滿足您的需求。
我不知道它是否提供圖書館,但看看CTAGS。
如果是純C,lex
和yacc
是你的朋友,但你需要採取考慮C預處理 - 源文件與未展開的宏通常是不符合C語法所以解析器,其中K & [R語法寫介意,很可能會失敗。
如果您決定解析預處理器的輸出,請準備好您的解析器將因特定編譯器的「擴展」而失敗,因爲很可能標準庫頭使用它們。至少在GCC的情況下。
我曾與GCC合作過,並最終決定用不同的方法實現我的目標。如果您只需要更改變量的名稱,正則表達式將會很好,並且不需要構建完整的解析器,恕我直言。如果您的目標僅僅是收集數據,那麼數據的最終來源就是調試信息。有許多方法可以從二進制文件中獲取調試信息 - 對於使用DWARF的ELF可執行文件,存在libdwarf,對於Windows-land(COFF?)應該也是如此。也許你可以使用一些現有的工具來獲得關於二進制文件的調試信息 - 再一次,我對Windows一無所知,你需要調查。
最近,我讀到的是看在COFF DLL的調試信息基於Win32的系統: http://www.drizzle.com/~scottb/gdc/fubi-paper.htm
解析C是很多比看起來難,當你考慮到 考慮不同的方言,預處理指令, 解析時需要類型信息等 告訴你「只是使用lex和yacc」的人有 顯然沒有做過生產C語法分析器。
一個工具,可以做到這一點,是我們C front end
它解決了上述所有問題。
完成後,它具有完整的可導航符號表 ,其中包含所有標識符和相應的類型信息。 列出全局和局部變量對此很重要。
我是語義設計背後的架構師。
也許gnu項目cflow http://www.gnu.org/software/cflow/?
另請參閱:http://code.google.com/p/pycparser/ – 2008-11-17 17:56:59