我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:双彩网 > 语义树 >

要做一个根据C代码自动生成函数调用关系图的小程序

归档日期:06-06       文本归类:语义树      文章编辑:爱尚语录

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  展开全部1,你可以尝试一下llvm,苹果公司支持的开源编译器项目,它可以将程序解析成基本块的关系图;首先llvm做的事情要比你要求的多很多,程序会被解释成一个模块,每个模块包含若干个函数function,function内部将代码分成一个一个基本块,基本块是一个编译原理的术语,你可以查一下相关定义。其次,高级语言程序要被解释成一种中间表达,这种中间表达可以描述一种图叫做有向无环图,你所需要的调用关系图是这个有向无环图中的一个子图。

  2,自己做的话首先你要了解有向无环图(DAG)的数据结构,比较适合描述函数调用关系图,其次要将函数抽象成DAG上的一个结点,这个结点至少包含以下信息,调用这个函数的母函数指针集合,这个函数调用的函数指针集合,当前函数的名称。llvm听起来太牛逼了,我自己做只需知道图是怎么实现的就行,后台算法不难,用MFC可做么?因为要求用VC实现只是算法的话,和MFC没有关系。。。,只有图形化输出用MFC,用C++的标准库就可以了,llvm里面有很多数据结构,定义的很好,用来表达图,你可以参考下。另外,有向无环图的实现有比较多的范例,这个就不用我给你找了吧。。。,追加一点:因为看你说都你解析代码估计问题不大,这里的解析,我不知道你指的到哪一层,因为按照编译原理,首先是词法解析,然后文法解析,如果你已经过了文法解析这一步,那么应该可以建立语义树,如果你只关系函数调用关系,语义树可以忽略掉文法解析传过来的绝大多数信息,只保留函数调用的文法规则返回回来的信息;由语义树到有向无环图只是一个数据结构创建的过程。

本文链接:http://furymagazine.com/yuyishu/7.html