看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《limife (子明)》之銘言: : 不知道有沒有高手可以給些意見呢? 任何意見都很歡迎。 : 謝謝 =) 我不是高手,不過我意見很多 XDDD 剛剛好,就在兩分鐘前,我通過所有的 test case 了。 一般性的建議、一: 先不要動手寫! 一定要把作業說明從頭到尾先讀過一次! 讀完一次以後,再讀一次! 細讀!只是不能掃過,不然一定會後悔! 因為我就後悔了 XD 標準很細,他的 test case 也是, 標準有很多例外,他的 test case 就會有那些例外, 作業說明裡面只會講到這些例外,但不一定會特別強調。 漏掉了,到時候就會做錯,做錯就會很慘。 一般性的建議、二: 先用他的程式碼跑過所有的 test case (在命令列下面 make test) 先看過每個 test case,跟標準答案輸出 一樣,細讀,看懂每一個 case 在幹嘛 不然你一定會後悔,因為…… test case 裡面測的東西,就是你要做的東西 你沒有 aware 到那些東西,做的時候就會漏掉 功能要人下去寫才會出來,不會自動生出來 你不先看 test case,等一下 test 不過,你還是得去看 test case 而且事先看完,有助於你對需求的完整瞭解,可以做出正確的 design 不然只瞭解了部份的需求,就下去實作,最後設計就會很差 然後東改西改,最後整個很醜又爛,而且還可能改不動 因為我就是這樣 這個作業的建議、一: 注意 raw-string-literal 跟 trigraph/universal-char-name (UCN \u0300 這種) 的交互作用 raw-string-literal 裡面的 trigraph 還有 UCN 是無效的 當你寫 \u0300 的時候,他就是字面的 "\u0300",不會被替換成對應的 unicode 這代表你要辨識出現在是不是在 raw-string-literal 裡面 才能決定要不要進行 trigraph, UCN 還有 line-splice 的變換 標準裡面的說法是: 統統都轉,等到判斷出 raw-string-literal 之後 再把 raw-string-literal 裡面的變換逆轉回來! 但是這種實作非常困難,我發現 cppgm 的程式沒有實作 當然他的 test case 也沒有這個 case,gcc-4.7 有實作,而 clang-3.2 也沒有 所以,如果你正確寫對的話 R"??'(__??(??)__)^" 應該是合法的 raw-string-literal,因為 ??' 會變成 ^ 所以這個上面會變成 R"^(___)^" 而且裡面的 ??( 跟 ??) 因為處在 raw-string-literal 內部 所以不會作變換,保持原樣 不過因為他自己的程式也沒作對,test case 也沒有,我建議大家不要作這功能 這個作業的建議、二 這個作業如果有 regex 可以用,就會變得非常非常簡單, 但是因為他的環境用的 gcc-4.7,STL regex 還沒有實作,所以沒的用。 有修過 formal language 的人,如果你知道怎麼作, 你可以花一點時間,實作出一個簡單的 regex,那這個問題的 80% 就直接被攻克。 我不是說 regex 簡單,regex 很難,但這個作業同樣很難 XD 太雜了。 這個作業的建議、三 作業說明說 Comments (/* ... */ and // ...) are replaced by a space character (ie they are part of a non-empty whitespace-sequence) Finally decompose the source file into a sequence of tokens of the following types: ... 我一開照這個順序去實作,結果挫屎, 一開始直接先把 comment 換成空白, 結果 string-literal 裡面的 ///**/ 都被當作註解變成空白 但其實應該保持原狀,所以請把 comment 的處理放到 parsing 本身 不要在前處理的部份作掉... 時程: 我總時程大概用掉 40 小時, 所以請盡早開始,如果你想拖到最後一個週末……那祝你好運 Q_Q 當然不排除強者只需要四個小時就可以搞定的可能性 但我自己是需要四個小時的十倍啦 XDD 最後祝大家好運! -- 我蠻希望版上有人可以陪我一起努力到最後的! 千萬要堅持下去阿,我不想只有自己一個人 >"<~ -- To iterate is human, to recurse, divine. 遞迴只應天上有, 凡人該當用迴圈.   L. Peter Deutsch -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 182.235.89.169
yoco315:網頁更新了 = =|| 加了新的 test case,我沒過... 03/02 03:47
CHeagleeye:大推!! 03/02 04:58
windows2k:我也過了, 不過我都不知道自己在寫什麼.. 03/02 08:23
windows2k:我沒考慮literal裡面有comment的情形, test-case也沒 03/02 08:24
windows2k:Raw String revert是整人的玩意 03/02 08:25
yoco315:你用 state machine 嗎 @@? 03/02 12:34
windows2k:原本是,後來整個重寫了..State Machine寫太爛 03/02 12:38
windows2k:我把comments放在 process之前, 因為空白/註解很難處理 03/02 12:42
windows2k:除非你要存之前的token, 不過檢查header也要之前資料 03/02 12:42
yoco315:我用 recur-dec parse,然後有 keep token,不然好難 @@ 03/02 14:48
yoco315:那個 heade-name 很麻煩... raw-string revert 超難 XD 03/02 14:49
limife:我還真的只有略讀過一遍耶!再來仔細看一遍 =) 03/02 23:54
yoco315:高手略讀一遍就夠了.. 我這種嫩咖才要多看幾次.. 03/03 00:55
limife:您謙虛了~ 03/03 18:32