我基本上需要用 Python 编写一个 C 预处理器,我已经四处搜索,因为我需要完全自定义我的代码并对正在发生的事情有一个完美的理解,所以我最好自己编写。
这就是我所在的位置:我首先解析一些头文件 (.h) 以找到 #define 关键字并使用所有已建立的指令(它们的值都有一个)建立一个字典。然后我需要根据之前找到的指令解析源文件 (.c)。我目前用来检查代码是否需要处理的机制如下:我取所有定义的名称及其值并执行一个exec("define_name = define_value")
(未指定时使用值'1')。然后解决一个条件,例如#if defined DEFINE_1 || defined DEFINE_2 && (DEFINE_3 == 10) ....
我删除 C 预处理器关键字以使它们生成 Python 风格的DEFINE_1 or defined DEFINE_2 and (DEFINE_3 == 10)
.
我最后eval(...)
在那个字符串上使用来找出结果。
问题是我想知道是否有必要使用 exec / eval 并且很多人不愿意使用它们,有没有更好的解决方案?