2012-04-18 59 views
3

可以說我有一個文件system.h中,我有以下結構需要一個C結構解析器

typedef struct Foo { 
    int count; 
    uint32 world; 
    Temp id; 
} Foo; 

typedef struct Temp { 
    uint64 id; 
} Temp; 

Foo bar; 

現在我需要一個宏,像DUMP_STRUCT(bar),即打印欄的所有成員(Foo類型)遞歸地。

是否有任何解析器/腳本(最好在php/python中)可以解析C文件或從可執行文件中從矮人獲取信息並創建一個類似於DUMP_STRUCT的函數?

回答

1

如果您的C頭文件包含C頭文件包含的典型東西(宏,預處理器條件,包含位字段),則需要完整的C語言分析器來處理頭文件。

從某種意義上說,GCC-XML可以生成你所需要的東西(它不是完全做「C」,而是C++),將各種結構插槽及其類型轉儲爲XML文本;你將不得不在代碼中使用這些數據結構。爲此,您可能必須匹配類型聲明的子結構(作爲有趣形狀/內容的XML子樹)。

我們的DMS Software Rengineering Toolkit及其C Front End會執行完整的預處理/解析/構建符號表。你可以從那裏生成GCC-XML的輸出,但是簡單地定製DMS來遍歷各種符號表和AST來提取你想要的東西比較容易。匹配過程比較容易,因爲符號表是爲方便訪問名稱空間結構,符號條目以及它們的類型信息(已經設置爲數據結構)而設計的。 DMS還提供表面語法模式匹配,既可以用來識別感興趣的AST,也可以用作代碼生成器來生成不能在語法上錯誤的代碼。

1

您可以使用GCCXML,它可以解析C(帶有一些限制)和C++頭文件,輸出爲XML。

1

您可以通過檢查pstruct如何工作來獲得一些里程數。 (它在Perl中我認爲,但使用編譯器刺死調試信息輸出關於結構佈局的信息)。