Re: [情報] C++大師認證
「除了作業三以外,其他的要怎麼寫才會漂亮 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
04/29 00:20, 1F
推
04/29 00:23, , 2F
04/29 00:23, 2F
討論串 (同標題文章)
以下文章回應了本文:
情報
11
21
完整討論串 (本文為第 21 之 29 篇):
情報
4
12
情報
5
18
情報
11
21
情報
3
9
情報
11
27
情報
0
1
情報
6
19
情報
7
24
情報
2
2
情報
3
5