Re: [情報] C++大師認證 (PA6,PA7)
有人說這串太長了,標題加個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
08/30 13:28, 1F
試了一下要
p *(ptr._M_ptr)
才可以
可是我其實希望能夠在watch那邊直接看...
※ 編輯: azureblaze 來自: 1.34.63.98 (08/30 13:40)
→
08/30 13:40, , 2F
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
08/30 16:38, 3F
→
08/30 16:39, , 4F
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
08/30 20:41, 5F
→
08/30 20:41, , 6F
08/30 20:41, 6F
→
08/30 20:48, , 7F
08/30 20:48, 7F
推
08/30 21:08, , 8F
08/30 21:08, 8F
推
08/31 10:21, , 9F
08/31 10:21, 9F
推
10/02 04:56, , 10F
10/02 04:56, 10F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章