我需要用Python编写一个C预处理器。我已经搜索过了,因为我需要完全自定义我的代码并且需要对其进行深入的理解,所以最好自己编写。
这是我的进展:首先,我解析一些头文件(.h)以查找#define关键字,并建立一个带有所有找到的指令的字典(其中包括它们的值)。然后,根据我之前找到的指令,我需要解析源文件(.c)。
目前我使用的机制来检查代码是否需要处理是:我获取所有定义的名称及其值,并执行
最后,我在该字符串上使用
问题是,我想知道是否必须使用exec / eval,很多人都有些不愿意使用它们,是否有更好的解决方案?
这是我的进展:首先,我解析一些头文件(.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,很多人都有些不愿意使用它们,是否有更好的解决方案?