如何从 C++ 源代码中提取所有类型定义、结构和联合

问题描述 投票:0回答:3

我继承了一个包含数百个文件的 Visual Studio 项目。

我想从每个 .h/.cpp 文件中提取所有类型定义、结构和联合,并将结果放入文件中)。

每个 typedef/struct/union 应该位于结果文件中的一行上。这将使排序变得更加容易。

typedef 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 { 布尔 c; int d;...}mySecondStruct;

我的问题是,我不知道使用正则表达式要查找什么(typedef/结构/联合的语法)。 我不敢相信以前没有人这样做过(我用谷歌搜索并没有找到任何相关内容)。

有人知道这些的正则表达式吗? (请注意,有些已使用 // other /* */ 注释掉)

或实现此目的的工具。

编辑:
我正在考虑自动生成源代码和/或对话框来修改使用底层 typedef/struct/union 的消息。我打算使用输出生成一个可用于此原因的 XML 文件。

这些的源代码是 C/C++ 的,几乎在我所有的项目中都使用过。这些项目通常不是用 C/C++ 编写的。通过使用 XML 版本,我只需要在一处更新/添加 typedef/struct/union,并且所有项目都能够自动生成源代码和/或对话框。

c++ struct extract typedef unions
3个回答
3
投票

除了某种文档工作之外,我无法想象这样做的目的。如果这就是您正在寻找的,我建议您使用 doxygen。

为了回答你的问题,我严重怀疑任何数量的正则表达式都足够。您需要做的实际上是解析代码。我听说过一个用于构建编译器和 C++ 工具的库,可以提供解析功能,但很抱歉我忘记了名字。我知道它就在那里,所以我会开始寻找它。


2
投票

您将不能能够使用正则表达式来完成此操作。实际做到这一点的唯一方法是获取 C++ 语法的词法分析器和解析器,并自己编写代码,以便在遇到您感兴趣的结构之一时将感兴趣的位转储到文件或数据库中。不幸的是,C++解析比较难。


1
投票

解析 C++ 是......困难的。除了试图解析它而自杀之外,还有一些选择。

其中每一个都会解析 C++ 代码并获取您之后的信息。如果您想将其转储到您请求的格式的文件中,那么解析它们的数据文件比解析原始 C++ 要好得多。

我建议您跳过所有这些,只使用 doxygen。它不会是您喜欢的格式,但您最好习惯 doxygen 的布局。

© www.soinside.com 2019 - 2024. All rights reserved.