Re: [情報] C++大師認證

看板C_and_CPP作者 (眠月)時間12年前 (2013/04/28 15:40), 編輯推噓2(200)
留言2則, 1人參與, 最新討論串21/29 (看更多)
「除了作業三以外,其他的要怎麼寫才會漂亮 XD」 其實我也很想知道 orz 因為我作業二花了超多時間在後續的修改, 就是因為我一開始只想著要「通過測試」, 導致架構很差,程式碼幾乎無法複用。 我分享一下我到目前 pa3 的心得。 當然我的設計應該還算不上漂亮,至少我自己就知道好幾個點有問題, 但至少是一個證明會動的架構,可以省下一些「根本行不通」的冤枉路。 但看了我的設計,可能就會被我污染,錯失了更好的設計, 所以往下看之前最好思量一下,是不是要被我的設計污染… pa1: 主要目標,設計一個 class pptoken { ... } 可以取得 pptoken type (newline/id/keyword/...) 等等 可以取得 source 的字串,可以取得 keyword 或是 operator 是什麼 如果是 literal 的話,可以取得內容,可以取得是不是陣列, 可以取得型別(char, int, long) 可以取得 user-defined 的 suffix ... 之類的 把 source code 轉成一個 vector<pptoken>,然後輸入 parse 的部份我是仿造 yard 寫了一個 parsing framework 但我現在覺得這不一定是個好主意,因為我懷疑後續還會不會用到 pa2: 主要目標,設計一個 class token。 設計一個函數 pptoken2token,可以把一個 pptoken 轉成一個 token, 一顆對一顆,把 pptoken 統統轉成 token,先不考慮字串的接合。 會得到一個 vector<token>。 轉完以後,設計一個函數 vector<token> concate_str_lit(vector<token>) 會把連續的字串接合起來,結果還是一個 vector<token> 然後輸入。 pa3: 讀入一行,把一行轉成 vector<token> 寫一個 recur-descent parser,parse_ctrlexpr(vector<token>) 傳回值是 shared_ptr<ctrlexpr_node> ctrlexpr_node 有個 virtual ctrlexpr_value evaluate() = 0; 每個繼承者實作自己的 evaluate(),最後印出 root value 就好了。 後面還沒寫,我也想知道 = =|| -- To iterate is human, to recurse, divine. 遞迴只應天上有, 凡人該當用迴圈.   L. Peter Deutsch -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.71.75.152

04/29 00:20, , 1F
我也幾乎是這樣 只是我用u32string取代vector<int>
04/29 00:20, 1F

04/29 00:23, , 2F
還有pa3我對每個rule是寫成function非class
04/29 00:23, 2F
文章代碼(AID): #1HVKBl8L (C_and_CPP)
討論串 (同標題文章)
以下文章回應了本文
情報
11
21
完整討論串 (本文為第 21 之 29 篇):
情報
4
12
情報
5
18
情報
11
21
情報
3
9
情報
11
27
情報
0
1
情報
6
19
情報
7
24
情報
2
2
文章代碼(AID): #1HVKBl8L (C_and_CPP)