用pycparser解析C语言踩坑记录

Python3.8

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

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)。

 

 

 

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Absoler

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值