Как извлечь ВСЕ typedefs и структуры и союзы из источника C ++ - PullRequest
4 голосов
/ 28 апреля 2010

Я унаследовал проект Visual Studio, который содержит сотни файлов.

Я хотел бы извлечь все определения типов, структуры и объединения из каждого файла .h / .cpp и поместить результаты в файл).

Каждый typdef / struct / union должен находиться в одной строке в файле результатов. Это значительно упростит сортировку.

typdef int myType;
struct myFirstStruct {char a; int b; ...};
union Part_Number_Serial_Number_Part_2_Response_Message_Type {struct {Message_Response_Head_Type Head; Part_Num_Serial_Num_Part_2_Report_Array Part_2_Report; Message_Tail_Type Tail;} Данные; BYTE byData [140];} myUnion ;
struct {bool c; int d; ...} mySecondStruct ;

Моя проблема в том, что я не знаю, что искать (грамматика typedef / structs / unions) с помощью регулярного выражения. Я не могу поверить, что никто не делал этого раньше (я гуглил и ничего не нашел по этому поводу).

Кто-нибудь знает регулярные выражения для них? (Обратите внимание, что некоторые закомментированы с помощью // others / * * /)

Или инструмент для достижения этой цели.

Edit:
Я играю с идеей автоматического создания исходного кода и / или диалогов для изменения сообщений, которые используют базовый typedef / struct / union. Я собирался использовать вывод для генерации XML-файла, который можно использовать по этой причине.

Источник для них находится на C / C ++ и используется почти во всех моих проектах. Эти проекты обычно НЕ в C / C ++. Используя версию XML, мне нужно будет только обновить / добавить typedef / struct / union только в одном месте, и все проекты смогут автоматически генерировать исходные тексты и / или диалоги.

Ответы [ 3 ]

3 голосов
/ 28 апреля 2010

Я не могу представить себе цель для этого, кроме какой-то документации. Если это то, что вы ищете, я бы предложил doxygen.

Чтобы ответить на ваш вопрос, я серьезно сомневаюсь, что любого количества регулярных выражений будет достаточно. Что вам нужно сделать, это на самом деле разобрать код. Я слышал о библиотеке для сборки компиляторов и инструментов C ++, которая обеспечивала бы разбор, но мне жаль говорить, что я забыл имя. Я знаю, что это там, хотя, поэтому я бы начал искать это.

2 голосов
/ 28 апреля 2010

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

1 голос
/ 28 апреля 2010

парсинг с ++ это ... сложно. Вместо того, чтобы убивать себя, пытаясь разобрать его, есть несколько вариантов.

Каждый из них будет анализировать код C ++ и получать информацию, которую вы получите. Если вы хотите записать его в файл в формате, который вы запрашивали, вам было бы намного лучше разбирать их файлы данных, чем разбирать raw c ++.

Я рекомендую пропустить все это и просто использовать doxygen . Это не будет в вашем предпочтительном формате, но вам лучше привыкнуть к макету doxygen.

...