有没有用来解析C/C++文件的模块?或者如何用正则表达式实现一下结果?

有没有用来解析C/C++文件的模块?或者如何用正则表达式实现一下结果?

由于代码中存在重复操作,希望能够通过解析头文件中的结构和类来生成对应的代码,不知道有没有解析C/C++文件现成的模块可以用?

或者如下形式的声明应该如何进行匹配?
class CTest
{
public:
     int m_nA;
     union Body{
       int a;
       short b;
       char c;
    };
};

其实也就是{ abc { asd } asdlkjf { af} }找到对应匹配括号的方法

正则表达式该如何写?(暂时排除字符串里出现{}的情况)
各位达人帮忙
用 Parse 相关模块 来写个 parser ?

正则式应该不是不可以吧。不过,你的问题描述的太粗略了,谁能一眼就看出你要干什么?


QUOTE:
原帖由 phrack2561 于 2008-7-11 15:56 发表
由于代码中存在重复操作,希望能够通过解析头文件中的结构和类来生成对应的代码,不知道有没有解析C/C++文件现成的模块可以用?

或者如下形式的声明应该如何进行匹配?
class CTest
{
public:
     int  ...

C++ 不是有模板么?
问题是这样的,为了使得模块间的网络通讯标准化,我们决定使用xml来代替直接的struct传送,也就要把通讯用的struct或class转换成xml文本串。
由于struct比较多,因此想通过某种形式的struct定义使得能够从解析struct定义入手,从而生成对应的用来从struct产生xml以及解析xml转换回struct的代码。
具体如下:
struct TMTParam
{
    // xml:"Id"
    int nId;
    // xml:"FileName"
    char szFileName[64];
    // xml:"FileInfo"
    struct TFileInfo
    {
       // xml:"FileSize"
       int nFileSize;
       // xml:"Path"
       char szPath[64];
    }tFileInfo;
};

那么依据这个定义可产生代码类似于
XMLNodePtr pNode0, pNode1, pNode2;
pNode0 = NewRootNode("xml");
pNode1 = NewChildNode(pNode0, "Id", nId);
pNode1 = NewChildNode(pNode0, "FileName", szFileName);
pNode1 = NewChildNode(pNode0, "FileInfo", NULL);
pNode2 = NewChildNode(pNode1, "FileSize", tFileInfo.nFileSize);
...

这样的话需要先对结构进行解析,获取所有的成员变量及类型等,但这个结构中可能内嵌结构或者联合数据类型之类的,所以想通过正则匹配检索出来。



另外ls老大说有C++模板是什么意思?是perl解析C++的模块吗?


其实最好是有一个专门用来解析C/C++文件的模块,通过解析得到结构体、函数体等等,不知道有没有现成的可用?