2009-12-23 109 views
14

有誰知道在Python中使用C頭文件的方式嗎?例如,我有一個C程序,其包括一個全局變量:如何解析C頭文件?

typedef struct ImageInfo 
{ 
    uint8_t revisionMajor; 
    uint8_t revisionMinor; 
    uint16_t checksum;  

} ImageInfo; 

ImageInfo gImageInfo; /* Placed at a specific address by the linker */ 

我想能夠採取由C編譯器/鏈接器產生的二進制和解析該結構(以及可能的修改)與一個Python腳本。

+0

該結構可能不存在「在二進制」 - 因爲它不真正「存在」,直到操作系統將程序加載到RAM後的執行時間。那麼你究竟想要做什麼? – 2009-12-23 23:53:42

+0

哎呦,我忘了提及全局變量是放在只讀(即Flash或ROM)內存中。在上面的例子中,gImageInfo將被放置在二進制文件的偏移量0x1000處,我希望能夠用Python讀出結構並獲取修訂信息來驗證校驗和。 – waffleman 2009-12-28 13:53:16

回答

12

Have a look at this C++ header parser written in Python。您也可以使用任何這些工具編寫自己的解析器:

+1

偉大的引用:我不知道這些模塊的一堆。我想知道它們是如何與pygccxml相比較的(它顯然有一個支持GCC的支持)。編寫C++解析器非常困難(儘管問題是關於C解析)。如果可能的話,使用比完整的基於GCCXML的堆棧更輕的東西將會很好。 – jkp 2009-12-23 08:55:10

8

看看pygccxml。我用它來構建我的C/C++源代碼的內存圖,我可以使用它作爲許多代碼生成任務的基礎。 PS:當我第一次開始使用基於Python的代碼生成時,我實際上試圖自己編寫一個解析器:節省自己的痛苦,甚至不去那裏! (看起來像你的已經雖然已經提示...)pygccxml是你想要的一切,更:) :)

22

這是SO昨天提到的;我還沒有機會更徹底地檢查它,但我的意思是。 pycparser是一個「用Python編寫的C語言分析器和AST生成器」。

https://github.com/eliben/pycparser

+0

雖然表面上是古老的歷史,但這個答案值得至少再多投2票 - 它提供了完全按照原始發佈請求進行的能力。 – synthesizerpatel 2010-11-20 13:03:40

+0

用於http://stackoverflow.com/a/13822683/181772(使用示例代碼) – 2013-01-07 11:29:09

2

出於同樣的目的,我考慮pyclibrary, 它不是一個完整的C解析器,但它的目的是分析的C頭文件,所以它是非常容易比pycparser或一些gccxml-使用基於文件的解析器:雖然記錄不完善,但試試CParser.py testHeader.h,你會看到它是如何工作的。

取決於pyparsing,據我所知,它是純python。