2012-12-30 19 views
4

我在開發特定的源到源編譯器的項目。在這個階段,我需要在C源代碼中找到變量的類型。例如,如果代碼是c[i]=j*f[k]+p;我應該找到的類型cijfk,並p變量(int*float,並且在源代碼中定義的任何其它類型)。有沒有工具可以這樣做?如果有多個工具,我更喜歡一個基於python的工具。需要一個工具來檢測C代碼中的變量類型

謝謝你。

+0

你不會從代碼段一樣,得到的類型。您將從相應的*聲明中獲得它們。*您的問題仍不清楚。 – EJP

+0

當然。相關聲明可在完整來源中獲得。請假設代碼編寫得很好並且可以編譯。所以我們在解析過程中有所有相應的聲明。 – ahmad

回答

4

你可以使用pycparser寫自己的解析器,你可以找到更多的例子here

from pycparser import c_parser 
parser = c_parser.CParser() 
text = 'int x; int y; float z;' 
ast = parser.parse(text, filename='<none>') 
ast.show() 
FileAST: 
    Decl: x, [], [], [] 
    TypeDecl: x, [] 
     IdentifierType: ['int'] 
    Decl: y, [], [], [] 
    TypeDecl: y, [] 
     IdentifierType: ['int'] 
    Decl: z, [], [], [] 
    TypeDecl: z, [] 
     IdentifierType: ['float'] 
+1

小而方便的工具!但是,它看起來並不接受所有'C'語句。當'text'是所有變量聲明時它工作正常。不幸的是,如果代碼包含賦值語句,解析器就會發出警報!我應該深入瞭解它是如何工作的。謝謝。 – ahmad

+0

@ahmad我認爲它處理所有有效的C代碼,檢查這個例子,你只需要聲明來找出變量的類型。 – iabdalkader

+0

示例目錄比看起來更具信息性。我認爲'pycparser'可以做我需要的。謝謝。 – ahmad

相關問題