2010-12-12 53 views
4

我需要從SWIG使用的.i文件解析函數頭,其中包含函數頭旁邊的各種垃圾。 (最終輸出將是一個函數聲明列表)
對我來說最好的選擇是使用GNU工具鏈(GCC,Binutils等)來做到這一點,但是我可能會錯過使用SWIG的簡單方法。如果我請告訴我!
感謝:]使用GNU工具鏈從文件解析C++函數頭

編輯:我也不知道如何做到這一點與GCC工具鏈,如果你有一個想法,它將是偉大的。

回答

2

我會嘗試從clanggccxml獲取抽象語法樹的XML轉儲。從那裏你可以很容易地提取你感興趣的函數聲明。

0

從C頭文件的垃圾中提取函數的最好方法是用什麼構成最臭的垃圾代替宏:宏。你可以做到這一點:

cpp - The C Preprocessor 
+0

它不幫助我。 Macros等人可能是文件的1%,我需要更強大的東西。 – stnr 2010-12-12 14:59:06

1

我們DMS Software Reengineering Toolkit提供通用程序解析,分析和轉換能力。它具有各種語言的前端,包括C++。

它已被用於分析和轉換非常複雜的C++程序及其頭文件。

你不清楚你在「解析函數頭」後會做什麼;通常人們想要提取一些信息或產生另一個神器。 DMS及其C++前端可以進行解析;您可以配置DMS來執行自定義內容。

實際上,這通常不是下午的練習; DMS是一個複雜的野獸,因爲它必須處理複雜的動物,如C++。我希望你能夠面對任何可以處理C++的工具的相同複雜性。 GCC工具鏈可以清楚地處理C++,所以你可以用它來做到這一點(在同樣的複雜程度上),但GCC被設計成一個編譯器,恕我直言,你會發現它是一個戰鬥,讓它做你的事情想要。

你的「輸出函數聲明」的目標不明確。你只想要功能名稱?你想要一個函數簽名?你想要所有的函數依賴的類型聲明?如果函數所依賴的類型聲明不在您打算使用的現有包含文件中,您是否需要這些聲明?

+0

我需要獲取函數簽名。它看起來像一個偉大的軟件,但不幸的是我需要解決開源\免費的東西。 – stnr 2010-12-13 23:11:02

+0

爲什麼不需要支持函數簽名的類型的類型聲明?在我們使用DMS進行的大多數應用程序中,您想要生成代碼來實例化/調用這些函數,您需要這些信息或者您沒有獲得可編譯代碼。 – 2010-12-13 23:17:57

+0

我可以只用函數簽名來獲得可編譯的代碼,因爲我可以對函數正在使用的類型做一個空指針,並使用* ptr作爲對象。這是一種欺騙,但它肯定會編譯,這就是我現在需要的。儘管謝謝你的偉大答案! – stnr 2010-12-15 11:37:51