2011-08-02 66 views
0

我解析.h.cpp文件,我需要找到/他們Hungarian equivalents替換所有非匈牙利譜寫變量。 「哦,爲什麼?!」你問?我的僱主要求匈牙利語,'nuff說。正則表達式來添加匈牙利命名法

現在我們只需要處理ints

考慮到所有這些情況......

int row;  // no hungarian prefix 
int nrow(9); // incorrect capitalization 
int number; // hmm... 
int nnumber = getValue(); // uh oh! 

他們應改爲:

int nRow; 
int nRow(9); // obviously ctor args and assignments shouldn't change 
int nNumber; 
int nNumber = getValue(); 

我拍攝的只是一行調用s///理想。

對於更多的挑戰,如果有人可以通過int在「類型檢查」之後獲得某些變量來更改此變量的所有實例,那將爲您贏得一些布朗尼點數。

這是我到目前爲止有:

s/(int\s+)(?!n)(\w+)/$1n\u$2/g; 

這不符合像int nrowint number事情雖然。

在此先感謝!

+4

我們可以推薦一個新的僱主嗎? –

+3

這不是應該如何使用匈牙利符號。這是原始的白皮書:http://msdn.microsoft.com/en-us/library/Aa260976,這裏有一個關於它的joelonsoftware的帖子:http://www.joelonsoftware.com/articles/Wrong.html – IronMensan

+0

@IronMensan好文章!直接進入我的書籤。 – SJuan76

回答

8

更明確地說,你正在試圖編譯使用正則表達式的程序。 This does not work that way

例如,您的單行已經忘記了函數參數,並且它無法解析任何用戶定義的類型(struct,enum)。更不用說.cpp建議C++建議類。

另外,方法/函數/內聯註釋會發生什麼?

我的建議是找到某個地方的語法編譯器,並將它傳遞給C++語法,因此對於每個定義,您都可以獲得寫入文件的值和類型。然後,你可以有正則表達式樂趣。每次使用每個變量時,您都可以嘗試寫入,以便稍後自動替換它們。

還有一個簡單的正則表達式複雜得多,但這個簡單的正則表達式會失敗太多,最後你會手動更改代碼。

作爲一個積極的說明,也許當你告訴你的老闆多少錢的費用,也許他會更好地考慮它。

+0

我不想「使用正則表達式編譯程序」。我不知道你從哪裏得到這些信息。事實上,我沒有計劃在完成後編譯它,但至少我可以回過頭來對語法進行一些快速更改,並做得很好。 – kevlar1818

+5

是的,你要編譯它,但你還不知道它。爲了知道第30行的id變量是第10行的nId還是第20行的sId,你需要知道你的方法/功能。此外,程序定義的類型,類的問題。您將需要解析程序,建立符號表...您生成機器代碼或修改後的源代碼並不相關。 – SJuan76