2013-06-19 53 views
0

我想通過使用pycparser來獲取c頭文件中所有宏定義的列表。查找c頭文件中的所有宏定義

如果可能的話,你能幫我解決這個問題嗎?

謝謝。

+1

在最簡單的形式,你可以使用grep能不?什麼是確切的用例?也就是說,當你說要列出所有的宏定義時,你的意思是CPP的方式是否意味着你只想列出它們? –

+0

我知道pycparser使用cpp,我設法得到c文件中的結構定義列表。但是我找不到在h文件中獲取所有#define宏的方法。現在,我只是用python解析頭文件,但這不是我想要的。謝謝。 – user1587140

回答

1

嘗試使用pyparsing,而不是...

from pyparsing import * 

# define the structure of a macro definition (the empty term is used 
# to advance to the next non-whitespace character) 
macroDef = "#define" + Word(alphas+"_",alphanums+"_").setResultsName("macro") + \ 
      empty + restOfLine.setResultsName("value") 
with open('myheader.h', 'r') as f: 
    res = macroDef.scanString(f.read()) 
    print [tokens.macro for tokens, startPos, EndPos in res] 

myheader.h看起來是這樣的:

#define MACRO1 42 
#define lang_init() c_init() 
#define min(X, Y) ((X) < (Y) ? (X) : (Y)) 

輸出:

['MACRO1', 'lang_init', 'min'] 

的setResultsName允許你調用的部分你希望成爲會員。因此,爲了您的答案,我們做了tokes.macro,但我們也可以輕鬆訪問該值。我把這個例子中的一部分,從Paul McGuire's example here

您可以瞭解更多關於pyparsing here

希望這有助於