синтаксический анализатор кода C ++ для отображения объектов класса в приложении

Я хочу работать над приложением, которое откроет проект Visual Studio и отобразит все классы в проекте. Он будет только читать заголовочные файлы, чтобы найти классы.

Мне нужно вечно анализировать каждый элемент данных и каждый метод для правильного отображения.

Поэтому мне было интересно, есть ли какой-нибудь API или библиотека, которую я могу использовать для анализа всех деталей файла заголовка C ++, чтобы я мог их отобразить.

РЕДАКТИРОВАТЬ:
Вот как выглядит мое приложение в данный момент. В настоящее время у меня есть проблемы с получением пользовательских типов, поэтому вы видите несколько безымянных типов Int32.
Предварительный просмотр приложения

2

Решение

Все надеются, что разбирать исходный код легко, даже 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 и регулярные выражения, чтобы искать объявления классов. Это, вероятно, приведет к бесполезному инструменту.

0

Другие решения

Других решений пока нет …