看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《yoco315 (眠月)》之銘言: : 「除了作業三以外,其他的要怎麼寫才會漂亮 XD」 : pa3: 想請問一下, pa4 pa5 (or pa6) 會用到 pa3 建出來的樹嗎 @@? 如果這棵樹以後用不到 我很想直接邊 parse 邊算... 請問這會讓以後的作業不好寫嗎? : 讀入一行,把一行轉成 vector<token> : 寫一個 recur-descent parser,parse_ctrlexpr(vector<token>) : 傳回值是 shared_ptr<ctrlexpr_node> : ctrlexpr_node 有個 virtual ctrlexpr_value evaluate() = 0; : 每個繼承者實作自己的 evaluate(),最後印出 root value 就好了。 : 後面還沒寫,我也想知道 = =|| 頁末防雷 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.166.46.41
LPH66:就我所知 pa3 只有用在 pa5 當中來計算 #if 的結果 所以... 05/25 20:22
LPH66:我的 pa3 其實是個滿傳統的解法就是了 05/25 20:22
jackace:不會 05/25 20:26
suhorng:感謝! 那我就不建出來了XD 希望可以w 05/25 20:29
suhorng:想到要寫那麼多 struct 就麻煩 <囧> 05/25 20:29
legendmtg:我聽到的也是pa5會用到pa3.... 05/26 00:13
jackace:pa5會呼叫pa3的程式計算結果而已 不代表會用到那些樹 05/26 00:51
yoco315:我是 pair<bool, bool> eval_ctrlexpr(vector<pptoken>) 05/26 01:42
yoco315:第一個bool表示ctrlexpr合法不合法,第二個表示true/false 05/26 01:43
yoco315:外部完全不需要看到這個tree 的內容。可以放心的選擇實作 05/26 01:43
jackace:pa3不是要有數字出來? 只有bool,bool數字部分怎麼回傳的? 05/26 02:38
yoco315:阿,抱歉沒講清楚,我是說我包給 pa5 的界面 xD 05/26 03:57
感謝大家 終於順利的寫完了 (希望 7/7 前能完成 PA4, PA5 阿!) 後來發現論壇上也有人問這個問題XD 果然應該多用不同的關鍵字搜搜看 話說 LPH 大說的傳統方法該不會是那個轉後序然後求值的演算法吧XD 補充一下 最後我沒有建樹 而是直接邊 parse 邊算值 (想到建樹要寫那麼多 struct (跟, 為了方便, constructor) 就有點懶 orz) 當然這有些缺點 例如有些會 error 的 sub-expression 因為 short circuit 不會被 evaluate, 但是 type 仍然不能忽略(一個是 statics, 一個是 dynamics), 所以除了要 紀錄 type, 還要紀錄是不是 "error", NaN 之類. 最後我留下的介面是 Maybe<ControllingExpressionValue> controlling_expression(vector<Token> tokens); 這個 Maybe 跟 Boost.option 是一樣的東西 只不過 Haskell 裡面叫 Maybe 至於寫 Maybe 遇到不熟的問題被雷到又是另一件事了QQ ※ 編輯: suhorng 來自: 118.166.50.221 (05/27 23:25)
yoco315:恭喜XD我這邊直接用shared_ptr當optional用了XD便宜行事XD 05/28 03:06
suhorng:shared_ptr都是指到同一個物件我怕發生意外orz 05/28 14:02
suhorng:剛好我沒有建樹不用動態記憶體.. 05/28 14:02
yoco315:我還蠻好奇 maybe 怎麼實作的,持有的物件記憶體怎麼管理? 05/28 14:06
suhorng:應該是自己管理...用unique_ptr然後該複製時複製 05/28 19:45
yoco315:了解~! 05/28 21:52
LPH66:還更傳統wwww 建優先度表直接從中序式硬算wwww 05/30 20:18
LPH66:我的結果是扔一個 PostToken 回來 如果沒事就會是個數字 05/30 20:19
LPH66:如果有事就扔 invalid 回來這樣 05/30 20:19