我基本上需要用Python編寫一個C預處理器,我已經搜索過,因爲我需要完全自定義我的代碼,並且對發生的事情有完美的理解,所以我最好自己寫。使用Python製作預處理器
這裏是我的位置:我首先解析一些頭文件(.h)以找到#define關鍵字,並用所有建立的指令構建一個dictionnary(用它們的值指定它們)。然後我需要解析源文件(.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是必要的,許多人都不願意使用它們,有沒有更好的解決方案?
根據我對基於Python的預處理器的經驗,Python太慢而不適合這個。另外,用於例如MSVC不好預處理(儘管編譯更糟糕)。你想解決什麼問題? – imallett