Как разобрать заголовочный файл C?

Кто-нибудь знает, какой способ использовать файлы заголовков C в Python? Например, у меня есть 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 script.

Ответы

Ответ 2

Это было упомянуто вчера на SO; У меня еще не было возможности проверить это еще до конца, но я имею в виду. pycparser, "анализатор C и генератор АСТ, написанный на Python".

https://github.com/eliben/pycparser

Ответ 3

Взгляните на pygccxml. Я использую его для построения графиков в памяти моего исходного кода на C/С++, который я могу использовать в качестве основы для многих задач генерации кода.

PS: Когда я впервые начал писать на основе кода на основе Python, я на самом деле попытался написать парсер самостоятельно: спасите себя от боли и даже не ходите туда! (похоже, что вы уже собрались, хотя...) pygccxml - это все, что вы хотите, и многое другое:)

Ответ 4

С той же целью я рассматриваю pyclibrary, это не полный синтаксический анализатор C, но он нацелен на разбор файлов заголовков C, поэтому его гораздо проще использовать, чем pycparser или какой-либо gsxml-синтаксический анализатор: хотя он слабо документирован, просто попробуйте CParser.py testHeader.h, и вы увидите, как он работает.

Зависит от pyparsing и, насколько я понимаю, это чистый питон.