我想構建一個解析並列出頭文件內容的程序。到目前爲止,這麼好,我發現它很容易解析和列出我編寫的頭文件,但是當我開始解析跨平臺API頭時,事情變得混亂。解析不規則的C++原型
我目前的做法是相當簡單的,這裏是解析以下功能的僞代碼示例:
void foo(int a);
void is a type, so we are dealing with instancing a type
foo is the name of that type
foo is followed by brackets, meaning it is a function of type void named foo
int is a type...
a is the name of that type instance
foo is a function of type void that takes one parameter of type int named a
然而,當我進入更大和更復雜的頭,我偶然發現有些不規則的原型,包括宏和上帝知道什麼。舉例:
GLAPI void APIENTRY glEvalCoord1d(GLdouble u);
GLAPI和APIENTRY是平臺相關的宏。我的簡單解析方案會破壞哪種類型,因爲它期望對象的名稱遵循其類型。這兩個宏恰好轉換爲__stdcall,__declspec(dllimport)或extern,但理論上它們可能意味着什麼,在編譯之前它們的含義不清楚。
如何編寫我的解析器,以便它可以處理這種情況,而不會感到困惑?宏本身是在早期階段定義的,所以解析器可以意識到GLAPI和APIENTRY是宏,因此它們可以簡單地被忽略,這是要走的路嗎?自然地,這只是衆多不規則之處的變體之一,解析器可能偶然發現通過不同的頭文件進行解析,所以任何有關如何處理任何「合法」頭文件內容解析的通用技術都是受歡迎的。
不,我不需要任何建議。乾杯,但。 –
我很抱歉,有一個感嘆號「需要建議!」但由於某種原因,該網站將其更改爲?甚至在我編輯我的帖子後,它仍然把一個問號...奇怪,但我假設,因爲我發佈了一個問題,問號是默認的...讓我猜,你試圖編輯它,並失敗了? ? :) – dtech
哈,你是對的..它確實似乎重寫了尾隨感嘆號。 –