您的位置:首页 > 其它

understand_api学习总结

2012-07-26 08:06 309 查看
Understand就像是一个编译器,只不过他分析出源码的信息,而不是生成可执行代码,Understand新建工程,先要对源代码进行分析(analysis),然后才能生成各种关系图,分析的过程就相当于编译了,分析了以后才能得到工程的architecture。

下面是api的一些understand类的总结:

Db class

($db,$status)=Understand::open($projectname[,$display]);参数display决定了以什么方式呈现你的源代码中的内容,比如说全大写、全小写、首字母大写等等;$status返回打开工程成功与否,打开失败的话会返回一系列响应的错误值;$db返回的是类Understand::Db()的对象;

$db->close()把当前库关闭了,以使其他的库可以使用,这是因为understand里面当一个command打开库时,其他command就不能用了,要想同时显示两项内容,在后面close();

$db->ents([$kindstring])返回一个类Understand::ents()的对象,参数用来过滤;

$db->language(),返回其源代码语言;

$db->lookup(“$name”[,$kindstring][,case]);case应该是解决重名多返回值的问题;

If the optional argument $caseis passed, it should be 0 to mean case-insensitive and 1 to mean case-sensitivelookup. The default is case-insensitive.

$db->metric(@metriclist)获得一系列可度量量的度量值,metriclist由$db->metrics()获得;

metric的参数可以是列表,也是可以是单独元素;

$db->name()返回工程名称;

Ent class

$ent->draw($kind,$name[,$option]),kind表示想要画的图类型,不同的源语言对应不同的图;name后缀是jpg或者png,option选项画图的格式:”layout= ,size= ”;

$ent->ents($refkindstring[,$entkindstring])返回它引用的实体,refkindstring表示引用类型是什么,是import,define,extend还是call等,entkindstring表示引用的实体类型的是什么;

$ent->filerefs([$refkindstring [,$entkindstring [, $unique ]]] )只对特定的file操作,不太明白;

$ent->kind()返回一个kind类;

$ent->kindname()返回实体的类型名字,等价于$ent->$kind->name;

$ent->longname(),一般文件名或C++的成员名会有langname;

$ent->metric(@metriclist)还有$ent->metrics();用法意义跟db一样;

$ent->refs( [$refkindstring[,$entkindstring [, $unique]]] )两个参数与上面的ents参数意义相同,只不过ents返回类型是ent class,而这个返回类型是ref class,这个对调用关系图非常重要;

$ent->ref( [$refkindstring [,$entkindstring ]] ),只在确定引用只有一个的情况下使用。

$ent->type()返回实体的类型;

还有library,ib,id,language等等现在看来还用不到,理解起来也比较简单;

两个例子:

@refs=$ent->refs("Define","Parameter")will return just definition references for parameter entities.(引用类型是define,就是定义了这个实体,这个实体的类型是参数)

@refs=$ent->refs("Call","Function",1) 返回一个被调函数的列表,1表示返回第一个被调用是的被调函数的引用信息

当然还有很多重要的类,但是ent类和db类应该是最重要的,掌握了这两个类中的方法,其他的都很容易理解;

ref和kind中包含的内容比较简单,基本上是一些名称、类型等。

Lexeme是源代码中的最小单位,就是类似于终结符等,如界符,字符串,关键字;

Understand::GUI类,当你打开一个文件,光标移动到某一位置,就会详细地显示相关信息;

上面的学习总结再结合官网上给出的understand->invocation脚本,写一个小脚本,通过过滤功能,可以将java程序中的方法调用关系显示出来,下一步创建关联数组跟二维数组,应该就可以输出调用关系的邻接矩阵了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: