c++使用libclang示例
源码如下:
#包含<标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
.现在只是刚会编译.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现