Как разобрать исходный код C ++ в Python? - PullRequest
12 голосов
/ 03 февраля 2011

Мы хотим проанализировать наше огромное дерево исходных текстов на C ++, чтобы получить достаточно информации для передачи в другой инструмент для создания диаграмм отношений классов и объектов, определения общей организации вещей и т. Д.

На данный момент моя лучшая попыткаскрипт Python, который сканирует все файлы .cpp и .h, выполняет поиск по регулярному выражению, чтобы попытаться обнаружить объявления классов, методы и т. д. Нам не нужен полноценный анализатор для захвата каждой детали или какой-то тяжелый генератор диаграмм UML -много деталей, которые мы хотели бы игнорировать, и мы изобретаем новые типы диаграмм.Сценарий работает, но, черт возьми, это правда: C ++ трудно разобрать!

Итак, мне интересно, какие существуют инструменты для извлечения необходимой нам информации из наших источников?Я не знаток языков и не хочу чего-то крутого в обучении.Что-то, что мы можем использовать для программистов с низким бровями: P

Python предпочтителен как один из стандартных языков здесь, но это не обязательно.

Ответы [ 7 ]

11 голосов
/ 03 февраля 2011

Я просто порекомендую Clang .

Это компилятор на основе библиотеки C ++, разработанный с учетом удобства повторного использования. В частности, это означает, что вы можете использовать его исключительно для анализа и генерации абстрактного синтаксического дерева. Он заботится обо всем утомительном разрешении перегрузки операторов, создании шаблонов и т. Д.

Clang экспортирует интерфейс на основе C, который расширен с помощью привязок Python. Интерфейс обычно довольно богатый, но я им не пользуюсь. В любом случае, взносы приветствуются, если вы хотите помочь расширить его.

6 голосов
/ 03 февраля 2011

Вы можете проверить GccXML и OpenC ++, а также Doxygen.

3 голосов
/ 03 февраля 2011

Можете ли вы выполнить шаг предварительной обработки? Doxygen анализирует большинство синтаксиса C ++ и создает xml со всеми связями. Компиляторы также создают отладочные базы данных (обычно формат dwarf из gcc и формат codeview из MSC).

1 голос
/ 03 февраля 2011

Вы запросили инструменты, которые могут извлекать информацию из C ++.

Наш DMS Software Reengineering Toolkit - это конфигурируемая технология компилятора для создания пользовательских анализаторов.Он имеет полный C ++ Front End с препроцессором, полный синтаксический анализ C ++ с конструкцией AST (включая захват комментариев) и полную таблицу символов.Их можно использовать для извлечения такой структурной информации и ее экспорта в то, что вы хотите обработать.

РЕДАКТИРОВАТЬ: Один из комментариев заключается в том, что в мире существует всего 3 полных синтаксических анализатора C ++.Я подозреваю больше;наверняка у IBM есть тот, который работает.Интерфейс DMS C ++ использовался в гневе в больших приложениях как в MS Visual Studio, так и в исходных кодах GNU C ++, поэтому он также может иметь достаточную квалификацию: -}

1 голос
/ 03 февраля 2011

Из того, что вы говорите о наших требованиях, ответ Тони на GccXML, вероятно, будет лучшим вариантом. Если это не сработает, вы можете попытаться создать схему вашей программы с помощью cscope или ctags, а затем перейти к нужной информации из ее вывода.

0 голосов
/ 03 февраля 2011

Если вы можете заставить себя выполнить этот анализ с помощью приложения на платформе Windows, сэкономить много времени и усилий и потратить 200 долларов на Enterprise Architect от Sparx Systems (я не имею отношения к этой компании, просто довольный клиент ). (Примечание: это не следует путать с собственным пакетом Microsoft Enterprise Enterprise для Visual Studio.)

EA может реверсировать несколько языков, включая C ++, C, Java и Python, создавая очень хорошие диаграммы классов UML. (EA поставляется в нескольких различных пакетах, Desktop самый дешевый, но вам нужно Professional, второй самый дешевый, чтобы включить функцию разработки кода.) Мне также нравится интеграция сгенерированных диаграмм классов и диаграмм последовательности, где вы Вы можете перетащить линию между линиями жизни объекта, и вам будет предложено меню определенных методов на основе определения класса целевого объекта. В моем бывшем консалтинговом бизнесе мы довольно часто использовали этот инструмент для разработки системных архитектурных предложений, которые мы затем включили в качестве части нашего предложения по проекту (просто скопируйте / вставьте диаграмму в документ Word). Вам не понадобится много времени, чтобы вернуть свои 200 долларов.

0 голосов
/ 03 февраля 2011

У меня был хороший опыт работы с PLY:

http://www.dabeaz.com/ply/

Но для этого требуется некоторый опыт работы с lex и yacc

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...