Я хочу работать над приложением, которое откроет проект Visual Studio и отобразит все классы в проекте. Он будет только читать заголовочные файлы, чтобы найти классы.
Мне нужно вечно анализировать каждый элемент данных и каждый метод для правильного отображения.
Поэтому мне было интересно, есть ли какой-нибудь API или библиотека, которую я могу использовать для анализа всех деталей файла заголовка C ++, чтобы я мог их отобразить.
РЕДАКТИРОВАТЬ:
Вот как выглядит мое приложение в данный момент. В настоящее время у меня есть проблемы с получением пользовательских типов, поэтому вы видите несколько безымянных типов Int32.
Предварительный просмотр приложения
Все надеются, что разбирать исходный код легко, даже C ++. Это не.
Если вы хотите точно проанализировать C ++ (заголовочные) файлы, вам нужен полный синтаксический анализатор C ++. На самом деле, синтаксический анализ заголовочных файлов, особенно файлов от производителя (например, Microsoft и даже GNU), особенно неприятен, потому что они обычно содержат недокументированные конструкции, специфичные для компилятора.
У вас есть только 4 хороших варианта:
Компилятор GNU. Очевидно, он может читать заголовочные файлы GCC. Я сомневаюсь, что он может читать файлы заголовков MS из-за специфических расширений производителя. GCC действительно, действительно, хочет быть компилятором и будет сопротивляться вашим попыткам согнуть его для других задач. Плавиться это расширение GCC, которое пытается сделать это проще; Я смотрел на это, и это не кажется намного лучше, но я пристрастен.
лязг. Он имеет полный синтаксический анализатор C ++, специализирующийся на исходных файлах в стиле GCC. Я не знаю, что он может сделать с конкретными конструкциями MS, не говоря уже о заголовках MS. Clang по крайней мере организован, чтобы позволить вам использовать его для пользовательских задач. (Очевидно, VS2015 включает в себя копию Clang для поддержки Intellisense, но вы не можете получить информацию, которую он собирает).
EDG. Это коммерческий интерфейс. Он имеет полный синтаксический анализатор и позволяет создавать инструменты вокруг него. Я не знаю, что он делает с заголовками MS или GNU. AFAIK, он не предоставляет ничего, кроме внешнего интерфейса. (Это много).
(Наш) коммерческий DMS Software Reengineering Toolkit с этими C ++ интерфейс. (Я, очевидно, много знаю об этом). Он имеет полный синтаксический анализатор C ++ 14 и обрабатывает заголовочные файлы GCC и MS. Наши внешние интерфейсы — единственные, кто пытается сохранить директивы препроцессора, если это важно для вас. DMS разработан, чтобы позволить вам создавать инструменты вокруг него. DMS обеспечивает большую поддержку для сопоставления с шаблоном и преобразования кода, помимо «просто разбора». После анализа информация о каждом классе доступна в таблице символов C ++; было бы довольно легко перечислить их и их членов, и их отношения с другими классами.
Независимо от того, какую технологию синтаксического анализа C ++ вы используете, «она очень сложна», не ожидайте, что работать с C ++ будет легко. И ожидайте высокую кривую обучения, чтобы понять любую из вышеуказанных структур. Если вы сделаете инвестиции и выполните создание реального инструмента, вы многому научитесь и будете готовы создать следующий, более сложный инструмент с гораздо меньшими усилиями.
Если вам не нужна точность, вы можете сканировать файлы, используя Perl и регулярные выражения, чтобы искать объявления классов. Это, вероятно, приведет к бесполезному инструменту.
Других решений пока нет …