4

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

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

每个 typdef/struct/union 都应该在结果文件中的一行。这将使排序更容易。

类型定义 int myType ;
结构 myFirstStruct { char a; 诠释 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;} 数据;字节 byData[140];} myUnion ;
结构{ 布尔 c; int d;...} mySecondStruct ;

我的问题是,我不知道使用正则表达式要查找什么(typedef/structs/unions 的语法)。我不敢相信以前没有人这样做过(我用谷歌搜索并没有发现任何东西)。

有谁知道这些的正则表达式?(注意有些用 // others /* */ 注释掉了)

或实现此目的的工具。

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

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

4

3 回答 3

3

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

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

于 2010-04-28T15:26:16.103 回答
2

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

于 2010-04-28T15:34:43.013 回答
1

parsing c++ is ... difficult. Instead of killing yourself trying to parse it there are a few options.

Each of these will parse c++ code and grab the info your after. If you want to dump it to a file in the format you requested you'd be a lot better off parsing their data files than parsing raw c++.

I recommend you skip all of this and just use doxygen. It won't be in your preferred format but you'll be better off getting used to doxygen's layout.

于 2010-04-28T19:33:50.833 回答