求教关于C++头文件解析

dcw0402 2011-05-28 10:43:33
比如有像如下的代码

/*
* 作者:ma.xw
* Create On 2011/05/24
* A.CPP
* A的实现
*/

#ifndef STACK_HPP
#define STACK_HPP
#define NULL 0

#include <deque>
#include <exception>
template <class T>

namespace NA{
namespace NAC{
class B;
class A;

class A : public IA,
public X:IXCallback
{
public:
A();
~A();

struct funParam_t{ //结构体
int na;
BOOL bb;
char* pch;
};

/*
* 我是注释
*/
virtual void SayHello(D:F:K* k);
void fun();
void Myfun(bool result){
char* ptmp = "Haluo wuode";
int ntmp(0);
ntmp = static_cast<int>(256.0
* rand() / RAND_MAX);
return ;
}


protected:
POINT m_ptBase;
int32_t m_count;
bool iserror;
}; //end of A

class B : public B:BPort{
public:
B();
~B();

public:
void Open();

protected:
void insideInvoke(bool* result);
};
}
}

#endif



我想把其中的信息提取出来,整理成

<文件 名字="A.hpp" 注释="/*\n* 作者:ma.xw\n* Create On 2011/05/24\n* A.CPP\n* A的实现\n*/">
<宏 内容="#ifndef STACK_HPP" />
<宏 内容="#define STACK_HPP" />
<宏 内容="#define NULL 0" />
<包含 内容="#include <deque>" />
<包含 内容="#include <exception>" />
<包含 内容="template <class T>" />
<空间 名字="NA">
<空间 名字="NAC">
<声明 内容="class B;" />
<声明 内容="class A;" />
<类 名字="A" 父类="public IA,public X:IXCallback">
<成员函数 名字="A" 公开="public" 虚函数="NO" constr="NO" static="NO" 返回类型="" 参数类型="" 形参="" 实现="" 注释="" />
<成员函数 名字="~A" 公开="public" 虚函数="NO" constr="NO" static="NO" 返回类型="" 参数类型="" 形参="" 实现="" 注释="" />
<成员函数 名字="SayHello" 公开="public" 虚函数="NO" constr="NO" static="NO" 返回类型="void" 参数类型="D:F:K*" 形参="k" 实现="" 注释="/*\n* 我是注释\n*/" />
<成员函数 名字="fun" 公开="public" 虚函数="NO" constr="NO" static="NO" 返回类型="void" 参数类型="" 形参="" 实现="" 注释="" />
<成员函数 名字="Myfun" 公开="public" 虚函数="NO" constr="NO" static="NO" 返回类型="" 参数类型="bool" 形参="result" 实现="{char* ptmp = "Haluo wuode";\nint ntmp(0);\nntmp = static_cast<int>(256.0 \n* rand() / RAND_MAX);\nreturn ;\n}" 注释="" />
<成员变量 名字="m_ptBase" 公开="protected" 类型="POINT" 注释="" />
<成员变量 名字="m_count" 公开="protected" 类型="int32_t" 注释="" />
<成员变量 名字="iserror" 公开="protected" 类型="bool" 注释="" />
</类>
<类 名字="B" 父类="public B:BPort">
<成员函数 名字="B" 公开="public" 虚函数="NO" constr="NO" static="NO" 返回类型="" 参数类型="" 形参="" 实现="" 注释="" />
<成员函数 名字="~B" 公开="public" 虚函数="NO" constr="NO" static="NO" 返回类型="" 参数类型="" 形参="" 实现="" 注释="" />
<成员函数 名字="Open" 公开="public" 虚函数="NO" constr="NO" static="NO" 返回类型="void" 参数类型="" 形参="" 实现="" 注释="" />
<成员函数 名字="insideInvoke" 公开="protected" 虚函数="NO" constr="NO" static="NO" 返回类型="void" 参数类型="bool*" 形参="result" 实现="" 注释="" />

</类>
</空间>
</空间>
<宏 内容="#endif" />
</文件>


大家帮我支个招,我思绪一团麻阿.说的最好能细点.先行谢过
...全文
224 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
dcw0402 2011-05-31
  • 打赏
  • 举报
回复
恩,谢谢大家.从长计议吧.
ryfdizuo 2011-05-30
  • 打赏
  • 举报
回复
up一下,这个脚本实现吧。
taodm 2011-05-29
  • 打赏
  • 举报
回复
如果你只要针对特点编码规范下的c++代码的解析,那么正则、lex/yacc等均可以。
如果是通用的c++代码,那难度就是做一个完整的编译器了,建议放弃。
老邓 2011-05-29
  • 打赏
  • 举报
回复
既然这不是一个简单的问题,那思路我不是在2楼、3楼给了吗?
想借助perl,就不是C++了。
dcw0402 2011-05-29
  • 打赏
  • 举报
回复
过来说一下阿.提供个思路也行.
dcw0402 2011-05-28
  • 打赏
  • 举报
回复
很遗憾perl语言不会阿.
有个问题,假设我用词法分析器分析完后,怎么归集这些数据呢.
比如
int main()
{
int fun(int* pi);
return 0;
}
分析成
int:普通标识符
main:普通标识符
{:界符
int:普通标识符
fun:
(:界符
int*:普通标识符
pi:普通标识符
):界符
;:界符
}:界符
return:
0:无符号实数
;:界符
下一步怎么做阿? 一头雾水.
kevin626521 2011-05-28
  • 打赏
  • 举报
回复
学习了。
Proteas 2011-05-28
  • 打赏
  • 举报
回复
这不是编译原理的知识吗?看看别人的实现了。
kakane 2011-05-28
  • 打赏
  • 举报
回复
perl 语言 的 正则表达式很强大 擅长处理这种工作
kakane 2011-05-28
  • 打赏
  • 举报
回复
perl 语言 的 正则表达式很强大 擅长处理这种工作
dcw0402 2011-05-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 soso101 的回复:]
我做过类似的,可以用正则表达式,这个工具很好用
[/Quote]
发个链接看看.
To老邓.你发的链接我看着头好大.词法分析和我的想法还是有些区别的.我就是想把原来代码信息提取出来,以便再生成一个新的类,两者之间共同的部分基本在声明里全包含了.
蜗牛sf 2011-05-28
  • 打赏
  • 举报
回复
我做过类似的,可以用正则表达式,这个工具很好用
老邓 2011-05-28
  • 打赏
  • 举报
回复
建议看看quex的实现,有源码,开源的。
http://quex.sourceforge.net/

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧