c++使用libclang示例
源码如下:#包含<标io.h>#包含<标极.h>#包含<浮控制.h>#包含<c语言c/索引.h>符*查找串="初化";整 参数个数=0;极 打印种类拼写(CX光标 光标){枚 cx光标种类 当前种类=c语言取光标种类(光标);常 符*当前拼写种类=c语言取c串(c语言取光标种类拼写(当前种类));打印格式...
·
源码如下:
#包含<标io.h>
#包含<标极.h>
#包含<浮控制.h>
#包含<c语言c/索引.h>
符*查找串="初化";整 参数个数=0;
极 打印种类拼写(CX光标 光标){
枚 cx光标种类 当前种类=c语言取光标种类(光标);
常 符*当前拼写种类=c语言取c串(c语言取光标种类拼写(当前种类));
打印格式("抽象语法树节点拼写为",当前拼写种类);
中 真;
}
极 打印拼写(CX光标 光标){
常 符*语法树拼写=c语言取c串(c语言取光标拼写(光标));
打印格式("抽象语法树节点拼写是:%s\n",语法树拼写);
中 真;
}
极 打印位置(CX光标 光标){
cx源区间 区间=c语言取光标扩展(光标);
CX源位置 起始位置=c语言取区间开始(区间);
CX源位置 尾位置=c语言取区间尾(区间);
cx文件 文件;正 整 行,列,偏移;
c语言取实例位置(起始位置,&文件,&行,&列,&偏移);
打印格式("开始:行::%u列:%u偏移:%u\n",行,列,偏移);
c语言取实例位置(尾位置,&文件,&行,&列,&偏移);
打印格式("尾:行:%u列:%u偏移:%u\n",行,列,偏移);
中 真;
}
枚 cx访问子结果 打印访问者(CX光标 光标,CX光标 父,cx客户数据 客户数据){
符*语法树拼写=c语言取c串(c语言取光标拼写(光标));
如(参数个数==3){
如(比较串(语法树拼写,查找串)==0){
打印拼写(光标);打印种类拼写(光标);
打印位置(光标);
}
}异{
打印拼写(光标);
打印种类拼写(光标);打印位置(光标);
}
中 cx递归访问子;
}
整 主(整 参个数,符*参值[]){
如((参个数>3)||(参个数<2)){
打印格式("参数个数不对!\n");中-1;
}
如((比较串(参值[1],"-v"))==0){
打印格式("版本:0.1\n");中 0;
}异 如((比较串(参值[1],"-帮助"))==0){
打印格式("sc读+文件名+输出抽象语法树节点信息\n");
打印格式("sc读+文件名+关键字.\n");
打印格式("sc读+-帮助.帮助.\n");
中 0;
}异{
整 结果=打开(参值[1],o只读);
如(结果==-1){
打印格式("打不开:%s.\n",参值[1]);中-1;
}
}
参数个数=参个数;如(参数个数==3)查找串=参值[2];
cx索引 索引=c语言创建索引(0,0);
CX翻译单元 TU=c语言解析翻译单元(索引,0,参值,参个数,0,0,cx无翻译单元);
CX光标 C=c语言取翻译单元光标(TU);
打印拼写(C);打印种类拼写(C);打印位置(C);
c语言访问子(C,打印访问者,无效);
c语言处置翻译单元(TU);c语言处置索引(索引);
中 0;
}
c++要链接libclang.lib
,libclang.dll
都放在同一目录下.
libclang.lib与dll
使用的是我刚编译的9.0.0版.这个llvm现在也成了版本帝了.
有空得研究cindex.py
.现在只是刚会编译.
更多推荐
已为社区贡献7条内容
所有评论(0)