如何找到VC程序中的变量列表?高分求解!!

allan8848 2003-08-24 11:48:13
不采用编译器的方法,
不运行程序
只是扫描.h和.cpp源代码
能行吗?采用字符串匹配的方法行吗?变量类型以及变量的定义有什么特征呢?
比如函数还有“func()“的特征,但是,变量呢?
对文件从头到尾扫描,如何得到呢?即使采用编译器的做法,那么编译器的做法又是什么呢?有没有VC编写的词法分析源代码?
本人的目的是想通过扫描.cpp文件得到一个函数都调用了什么函数,但函数一般是采用
CFile file;
file.Open() 的方式,所以得到的函数必须知道对象的类型CFile,因此要得到变量(即对象)的类型(所属类)
敬请各路高手赐教!高分送上!
...全文
32 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
allan8848 2003-09-07
  • 打赏
  • 举报
回复
我的想法是先找到file,然后找到所有他出现的地方,往前判断他的类型,这样会牵涉到变量的作用域
寻开心 2003-09-01
  • 打赏
  • 举报
回复
如果你的cpp文件是可以正常编译运行的,也就是说不存在语法错误的时候。
可以这样考虑
只考虑这样的变量声明语法
CFile * pFile, file1;
int a=1, * b;
第一个token就是变量的类型了, 后面的就要自己分析去。
对于你的程序来说,遇到的第一个非关键字,也不是已知变量名字的token,就是新的变量了。
boodweb 2003-09-01
  • 打赏
  • 举报
回复
特征就是中间有一个空格,两边都是数字、字母、下划线构成的词阿
好像c++里没有其他这样的语法结构了吧....
allan8848 2003-08-31
  • 打赏
  • 举报
回复
如何找type_specifier呢?它有什么特征呢?
CFile是关键字,但是,我不可能把MFC所有的类都找一遍吧,那样的话,扫描的效率太低了!
我只想找到对象类型名称以及变量,至于他们所表示的含义,可以不作考虑。
寻开心 2003-08-28
  • 打赏
  • 举报
回复
根据关键字搜索,比如 int float
以及你.h当中定义的class struct union等后面的字也要作为关键字,还有#define typedef所定义的。

不限定范围很难作,关键字太多了。
寻开心 2003-08-28
  • 打赏
  • 举报
回复
CFile也是关键字,只分析cpp不可以,它在头文件当中定义的。
除非你保证cpp文件内容都是正确的,这种情形下,也许有办法。
办法就是分析每行,最前面的非关键字就作为变量类型,后面的字符串由,符号分开的就是变量了。
boodweb 2003-08-28
  • 打赏
  • 举报
回复
可不可以直接找定义的那些语句呢
type_specifier id1,id2,...
然后判断type_specifier在不在基本类型里
allan8848 2003-08-28
  • 打赏
  • 举报
回复
编译原理比较复杂,一个对VC进行简单分析的小程序要进行词法分析得到符号表,在进行语法分析得到结构还是比较复杂的。boodweb(TTT)说的是正规的做法,很好,不过要麻烦一点。
happy__888([顾问团]寻开心) 说的方法比较简单,但是对关键字进行扫描,又出现问题来了,如何得到关键字呢?比如CFile file,CFile不是自己定义的关键字,是MFC系统定义的,那么如何判断提取“类型“关键字呢?
我的意思是说,在不知道CFile是关键字的情况下,如何找到一个文件中的变量以及它们所属的类?
C语言的基本数据类型如int double等变量不在分析之列。只找对象变量!
boodweb 2003-08-28
  • 打赏
  • 举报
回复
对象类型一般可以通过构造符号表来实现
c++估计会很麻烦,还有继承什么的
还是看看编译原理把,关键是要构造语法树和符号表
allan8848 2003-08-27
  • 打赏
  • 举报
回复
苦苦等待,没有回音
allan8848 2003-08-26
  • 打赏
  • 举报
回复
怎么没有高手及有经验者做答呢?在线等待中
其实就想问一个问题:如何得到变量列表?

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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