Re: [情報] C++大師認證 (PA6,PA7)

看板C_and_CPP (C/C++)作者 (AzureBlaze)時間12年前 (2013/08/30 12:08), 編輯推噓6(604)
留言10則, 5人參與, 最新討論串1/1
有人說這串太長了,標題加個tag好了 上週寫完PA7,不過不知到位什麼SSH key跑掉了 剛剛才上傳成功 首先關於PA6的部份 其實官方是不建議用code generator的 http://forum.cppgm.org/question/2089/automatic-file-generation/ 他認為 。產生出來的code之後會有太多需要修改的地方 產生的code通常很複雜不容易修改 。手寫可以加深印象幫助讀RAA 。手寫PA6跟後面需要寫的數量比起來只是小意思, 在這邊少寫5000行整體來說沒什麼幫助 不過我認為我後來用在PA7的方法可以避免很多修改, RAA太大了有沒有印象讀起來都很頭痛 寫幾條rule之後腦袋就進入了跟generator一樣的無腦模式 我PA6也手寫了三分之一,可是讀起來根本沒感覺 (而且我不配上PA7之類的實際應用根本讀不下去) 少寫5000行就可以多打好幾小時的電動 最重要的是generator bug比埋在一萬行程式裡200個不同地方的bug好解多了 (發現忘了選最長的alternative就會發生上面的事) PA7我的做法是: PA6每個rule都弄成 virtual AST parseXXXX() 然後AST的介面設計成容易檢查下面有哪些subtree,重複的tree有幾個之類的 PA7就直接繼承PA6的parser,每個需要額外動作的rule就蓋過去 大部份的rule都只要爬PA6的AST就夠了 AST PA7::parseXXXX(){ AST rst = PA6::parseXXXX(); //process ast if(AST nns = rst->get("nested-name-specifier"){ //.... } return rst; } 有些rule只能整個重寫 (PA7只有namespace-definition需要,因為他影響到subtree 雖然改grammar應該也可以做到,但我不想動pa6.gram) 再來就是一些helper function像是直接從type-specifier AST中抽出type 這樣就可以把PA6 generate出來的噁心code遮起來 (一直想"有時間"要改寫,可是當然不會"有時間"XD) PA7相當花時間, 我大概花了80~100小時左右(雖然後半部不太專心) PA7開始變成有好幾件事情要做, 不像前幾個PA幾乎只要處理一件事就好了。 幾乎每個test case都會冒出幾個難解的bug 只靠printf debug到PA6似乎已經是極限了 後來採用codeblocks+gdb,至少這樣我才能方便的設breakpoint (沒辦法理解只靠gdb要怎麼流暢的做這些事) 不過不知道gdb有什麼方法可以看到shared_ptr目標的內容... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.34.63.98

08/30 13:28, , 1F
這樣嗎?在 gdb 執行 p *(shared_ptr_變數名稱)
08/30 13:28, 1F
試了一下要 p *(ptr._M_ptr) 才可以 可是我其實希望能夠在watch那邊直接看... ※ 編輯: azureblaze 來自: 1.34.63.98 (08/30 13:40)

08/30 13:40, , 2F
這樣好像可以 p *(shared_ptr_變數名._M_ptr)
08/30 13:40, 2F
裝了pretty printer下去至少STL container可以看了 可是smart pointer還是沒辦法像pointer一樣直接看目標內容 google了好像也找不到解法 (只找到4.X用的) 有點好奇這應該是常用功能吧? ※ 編輯: azureblaze 來自: 1.34.63.98 (08/30 14:46)

08/30 16:38, , 3F
http://goo.gl/Lfc5TX 有看到 SharedPointerPrinter 啊
08/30 16:38, 3F

08/30 16:39, , 4F
我的GDB 是閹割版,不能用 python pretty printer,沒試過
08/30 16:39, 4F
他本來的只會印出reference count之類我覺得沒什麼用的資訊 http://ideone.com/Y1nWoU 總算是改出來了 能夠看shared_ptr->shared_ptr->shared_ptr比較容易爬AST watch範例 http://ppt.cc/ElYI ※ 編輯: azureblaze 來自: 1.34.63.98 (08/30 18:10)

08/30 20:41, , 5F
話說 PA6 的死線出現了...9/22 正好是中秋節連假結束時
08/30 20:41, 5F

08/30 20:41, , 6F
這是要我們中秋節在家寫 cppgm 嗎 (眼神死)
08/30 20:41, 6F

08/30 20:48, , 7F
外國沒有中秋啊。樓上不是寫完了嗎?
08/30 20:48, 7F

08/30 21:08, , 8F
我還沒啊 現在才剛初步完成 code generator...
08/30 21:08, 8F

08/31 10:21, , 9F
我的PA6,PA7早已完成了!.....在我心中
08/31 10:21, 9F

10/02 04:56, , 10F
話說PA7和PA8的死線也出現了耶…2014年1月12日!!
10/02 04:56, 10F
文章代碼(AID): #1I81gkPB (C_and_CPP)
文章代碼(AID): #1I81gkPB (C_and_CPP)