pycparser是python的一个用于解析C语言的第三方库,相比于LLVM、CDT等安装使用过程较为简洁,它的官方开源库为https://github.com/eliben/pycparser。以下步骤记录我的安装和初步使用过程
安装
没什么好说的,直接
pip install pycparser
如果遇到下图错误,有可能是网络原因,可以尝试 -i 添加镜像再下载
即
pip install pycparser -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
下载成功
运行使用
1. 循环引用
在尝试运行官方样例c_to_c时首先遇到了这样的问题:
让人百思不得其解,还专门去安装查到的方法修改了__init__文件,以为是init文件里的函数导入需要特殊方法。后来仔细一看才发现,是因为我这个python文件命名的问题,ast和ast库重名了,导致循环引用。
于是修改文件名,此问题解决。
2. unable to invoke 'cpp'
运行样例c_to_c时又报错:
提示unable to invoke ‘cpp’,我顺腾摸瓜在__init__.py的preprocess_file函数中找到了这句提示的出处:
一开始我对这个parse_file函数的参数use_cpp的理解是标志使用C++而非C文件,而这里的check_output是查看路径中是否有这个文件的意思。后来发觉不对,一查资料发现check_output函数的作用是执行一条命令行指令。好家伙,那这里传入的可是cpp path/filename,原来意思是cpp是一条命令吗?后来经过阅读文档注释发现好像确实是这样,这条命令的作用是先对源文件进行预处理(C Pre Process),再拿去生成语法树。所以如果想简单使用、不想再安装这个工具的同学可选择直接将use_cpp置为False,就不会再出现这种错误了,就是注意待分析的文件里不要有#命令(头文件、宏定义、pragma)。