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