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.现在只是刚会编译.

已标记关键词 清除标记
相关推荐