Подтвердить что ты не робот

Как разобрать источник С++ в Python?

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Вы можете проверить GccXML и OpenС++, а также doxygen.

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

EDIT: Один из комментариев заключается в том, что в мире есть всего 3 полных анализатора С++. Я подозреваю больше; конечно, у IBM есть тот, который работает. Передняя часть DMS С++ использовалась в гневе для больших приложений как в MS Visual Studio, так и в исходных кодах GNU С++, поэтому она также может быть приемлемой: -}

Ответ 6

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

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

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

Ответ 7

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

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