Я ищу способ разобрать код С++ для получения базовой информации о классах. Мне действительно не нужна большая информация из самого кода, но мне нужно, чтобы он обрабатывал такие вещи, как макросы и шаблоны. Короче говоря, я хочу извлечь "структуру" кода, что вы увидите на диаграмме UML.
Для каждого класса /struct/union/enum/typedef в базе кода все, что мне нужно (после обработки шаблонов и макросов):
- Их имя
- Пространство имен, в котором они живут
- Поля, содержащиеся внутри (имя типа, имя поля и ограничения доступа, такие как private/mutable/etc)
- Функции, содержащиеся внутри (тип возврата, имя, параметры)
- Объявляющий файл
- Номера строк/столбцов (или смещение байта в файле), где начинается определение этих данных
Фактические инструкции в коде не имеют значения для моих целей.
Я ожидаю, что многие люди скажут, что я должен просто использовать регулярное выражение для этого (или даже Flex и Bison), но они не очень эффективны, так как мне действительно нужны обработчики препроцессора и шаблона.