满分求解决之道,欢迎高手点击!

edward0716 2004-09-17 06:17:48
我的需求:
1.问题描述:
采用多线程机制,分析C/CPP头文件(.h),并以树型结构显示分析结果。
2.平台:
任何平台(建议MS-WINDOWS/UNIX OS)
3.编程平台:
支持OOP的编程工具(建议VC++)
4.编程语言:
C++语言

举例说明:
//a.cpp
#include "aa.h"
#include "bb.h"
#ifdef _SOME
# include <cc.h>
#else
# include <dd.h>
#endif
Some Code Follwing ...
......

//aa.h
#include "aa1.h"
#include <aa2.h>
...

//bb.h
#include ...
...

//cc.h
#include ...
...

//dd.h
#include ...
...

程序运行打开一C/CPP文件(如a.cpp),扫描文件提取文件中所包含的头文件(.h),并将主文件(a.cpp)中扫描的头文件作为一级树型列表,用其它线程同时扫描已经提取的头文件,扫描是否含用头文件,如果有则作为当前文件的下一级树型列表,否则中止该线程。一直扫描到最后,但是要注意重复包含的情况。程序用多线程的目的就是为了处理文件中含用多个头文件,用子线程完成其它头文件的扫描工作,这样在速度上比递归算法要快得多,效率也要高。如本例中通过多线程扫描分析的结果:
▄a.cpp
▄aa.h
▄aa1.h
▄aa2.h
▄aa21.h
▄ ...
▄bb.h
▄bb1.h
▄bb11.h
▄ ...
▄cc.h
▄ ...
▄dd.h

(* ▄代表树型结点)
提示:在程序中可设三个链表:
a. 正在处理中的头文件表(该链表中存放所有工作线程处理的头文件名)
b. 没有处理的头文件表(该链表中存放线程待处理的头文件名)
c. 错误的头文件表(该链表中存放不存在的,或者出错的头文件名)

以上就是问题的描述,该问题综合性比较强,如果有不清题意或者有错误之处,请在本贴中贴出错误或者不明之处,您也可以致信:weilei0716@163.com。

大家可以发表自己对该问题的看法/思想/程序/,欢迎高手一起交流!
解决后相信这贴将是本BBS线程中的又一精贴。致谢各位!!!
...全文
123 点赞 收藏 14
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
edward0716 2004-09-20
我的想法是:读每一头文件,然后按行处理,每行处理中包括三个方面:
1、//行注释过滤。
2、/**/多行注释过滤,这可能不在一行,为每一行做个FLAG,如果是/*多行注释FLAG为TRUE,一直扫描到*/结束,此时FLAG为FALSE,继续按行处理。
3、条件编译中可能包含头文件。
可能还有些不足,请指出,谢谢。这是我在析头文件的整个思路,不知道有没有什么不妥?请高手指点一二。
回复
edward0716 2004-09-20
能不能考虑点周全一点。
[引用]仅仅一个头文件包含问题嘛。
有没有考虑到文件包含死循环的情况
有没有考虑到文件中包含多个头文件,分级扫描这些扫描到的头文件下的其它文件(用多线程来提高程序的效率)
。。。
并不是扫描一个头文件中包含多少其它头文件。
而是一直扫描到没有包含为止,然后用树型结构列出来。
请相信:说比做容易!
Do it yourself! 呵~你试试~~
回复
edward0716 2004-09-20
顶起~
回复
kpld8888 2004-09-19
仅仅一个头文件包含问题嘛。应该和目录很相似的。假如你现在的位置是在目录的某层中,然后向上回溯,直至找到根目录。
回复
edward0716 2004-09-19
晕~
再顶~
回复
edward0716 2004-09-19
已经快沉下去啦~~
没有高人现身吗?
加油!~!~!~
回复
edward0716 2004-09-18
大家有什么好的想法/思想可分享?
回复
kugou123 2004-09-17
就是有点像根据语义,建立语法树那种原理。
回复
phineco 2004-09-17
看编译原理就有这样的例子了,
回复
oyljerry 2004-09-17
不是很明白,gz
回复
adamx 2004-09-17
学习

回复
Pipi0714 2004-09-17
编译原理词法分析!
回复
rivershan 2004-09-17
用得着多线程扫描么?
你有多少可以扫?
回复
dulei310 2004-09-17
不明白 顶
回复
发动态
发帖子
进程/线程/DLL
创建于2007-09-28

1.5w+

社区成员

VC/MFC 进程/线程/DLL
申请成为版主
社区公告
暂无公告