Поиск синтаксического анализатора кода C++ для просмотра всех подписей
Я ищу синтаксический анализатор C++, который может извлечь все функции и методы с его сигнатурами. Есть ли что-то подобное?
Я посмотрел на gccxml там у меня есть проблема, что он не может использовать пространства имен, и это не хорошо, когда присутствует только заголовочный файл.
4 ответа
Компилятор Clang, очевидно, обладает функциональностью для этого, если я правильно помню, есть даже API для доступа к дереву кода, сгенерированному синтаксическим анализатором.
Наиболее очевидные варианты:
- Ctags
- Cscope
Просто образец справочной страницы GCC:
-fdump-noaddr -fdump-unnumbered -fdump-translation-unit[-n] -fdump-class-hierarchy[-n] -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline
-fdump-statistics -fdump-tree-all -fdump-tree-original[-n] -fdump-tree-optimized[-n] -fdump-tree-cfg -fdump-tree-vcg -fdump-tree-alias -fdump-tree-ch -fdump-tree-ssa[-n] -fdump-tree-pre[-n] -fdump-tree-ccp[-n] -fdump-tree-dce[-n]
-fdump-tree-gimple[-raw] -fdump-tree-mudflap[-n] -fdump-tree-dom[-n] -fdump-tree-dse[-n] -fdump-tree-phiopt[-n] -fdump-tree-forwprop[-n] -fdump-tree-copyrename[-n] -fdump-tree-nrv -fdump-tree-vect -fdump-tree-sink -fdump-tree-sra[-n]
-fdump-tree-fre[-n] -fdump-tree-vrp
Также есть gccxml бэкэнд
Вы можете использовать -dump
опция инструмента http://lvc.github.io/abi-compliance-checker/ для анализа сигнатур функций и методов из ваших заголовочных файлов:
abi-compliance-checker -lib NAME -dump DESC.xml -headers-only -stdout > api.dump
XML-дескриптор (DESC.xml
) является следующим:
<version>
VERSION
</version>
<headers>
/path(s)/to/headers/
</headers>
Инструмент работает следующим образом:
- Вызов
GCC
с-fdump-translation-unit
и набор автоматически сгенерированных-I...
параметры заголовков, указанные во входном XML-дескрипторе; - Разобрать дамп AST, сгенерированный
GCC
; - Генерация сигнатур функций и определений типов в формате Data::Dumper или XML (если требуется
-xml
опция предусмотрена).
Образец подписи int BZ2_bzRead ( int *bzerror, BZFILE *b, void *buf, int len )
функция от bzlib.h
Заголовок выглядит так:
'228' => { 'Header' => 'bzlib.h', 'Line' => '160', 'Param' => { '0' => { 'algn' => '4', 'name' => 'bzerror', 'type' => '30' }, '1' => { 'algn' => '4', 'name' => 'b', 'type' => '16' }, '2' => { 'algn' => '4', 'name' => 'buf', 'type' => '68' }, '3' => { 'algn' => '4', 'name' => 'len', 'type' => '41' } }, 'Return' => '41', 'ShortName' => 'BZ2_bzRead' },
Вы можете попробовать скомпилировать свой код с save-temps
флаг установлен на gcc, это заставляет gcc выводить файлы с развернутыми макросами и полными подписями. это файлы.ii.