[STL] 怎麼樣簡化這樣的Code比較好

看板C_and_CPP作者 (今、そこに いる僕)時間15年前 (2010/11/20 21:47), 編輯推噓0(2218)
留言22則, 10人參與, 最新討論串1/1
程式碼在此:http://nopaste.csie.org/ba2ff 因為最近在寫一個parser, 但是BNF還沒有完全想好, 所以程式是邊想邊改的。我不喜歡 一直改來改去, 所以想要作出一些類別, 它們可以代表BNF裡的terminal symbol跟 non-terminal symbol, symbol後面的symbol就用va_list來呈現, 這樣串來串去, 就可以 作出一條條的rule了。對terminal symbol部份做出lexical analyser, 想改rule時只要 重新串每個symbol就好... 然後就做出上面的實驗code了。class A代表的是一個symbol, 有3個template argument , 分別是輸入的資料, 最多能串的symbol數, 跟長度是否固定。裡面有個陣列, 可以存 後面的symbol, 然後提供了一個foo函數, 子類別要實作它們以定義功能。 我用class A作出幾個子類別, 分別是B0(terminal symbol), B1(可串一個symbol), B2 (可串兩個symbol), VB2(至多可串兩個symbol), 然後用個外在函數gc來產生想要的這 些類別, 並且把它們互相接起來。 嗯...基本上它有照我想的運作, 不過我想改善以下幾點... 1. 能不能不用不定參數來達到gc作的事? 因為不定參數實在很不好看。 2. 如果可以, 希望讓gc裡的長度檢查在compile-time就處理掉。 3. 程式碼的長度再縮短... 4. 不要用new...我想過。但是似乎作不到, 因為類別A是個抽象型別, 如果不用指標, 它裡面的陣列就會因為不能實體化而讓compiler報錯。 大概是這樣。這是用VS2005編的。gcc似乎不支援intel版的asm...。 啊對了, 用0結尾而不給va_list的參考點是因為, 沒有特別要傳入的東西。這樣程式比較 清爽。若硬要塞個參考點, 我想也只能塞參數個數, 但是修改程式時就要一起改數字, 很 麻煩。用0當串列的結尾的話, 忘了加會在runtime被挑出來, 萬一忘了加而那格剛好是0 的話, 程式也不會因此當掉... --               裸になって                                                   何が悪い?      -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.116.57.76 ※ 編輯: ccbruce 來自: 122.116.57.76 (11/20 21:56) ※ 編輯: ccbruce 來自: 122.116.57.76 (11/20 22:06)

11/20 22:14, , 1F
被當掉只好重修了
11/20 22:14, 1F

11/20 22:18, , 2F
gcc吃的是AT&T語法的asm
11/20 22:18, 2F

11/20 22:19, , 3F
當掉是指程式crash吧= =!?
11/20 22:19, 3F

11/20 22:23, , 4F
不知道題目是什麼...請愛用algorithm裡的copy...明明
11/20 22:23, 4F

11/20 22:24, , 5F
建構子給的就是指標, 你還把它當陣列, 大小在模板引數
11/20 22:24, 5F

11/20 22:24, , 6F
就有給了...
11/20 22:24, 6F
算了用修的比較快, 我這不是作業文, 你不用把它當作業文看...沒人回也不會怎麼樣... 我是想要作到在template上就限制住傳到constructor的參數個數。也就是說當我說 _len=0時這個類別就完全不接受參數, _len=1時就接受一個, 並且這些檢查是在compile- time就完成。 不過我失敗了, 所以才會造出一個gc函數, 至少能在run-time把參數數量限制住。並且退 而求其次限制住傳進constructor的陣列長度。 當然針對每個類別都重寫一次constructor也是一個方法, 但是這樣我就不用PO這篇文了。 如果你class數量少也就算了, 萬一你有一大堆class的話要怎麼作? 有的收一個參數, 有 的收兩個, 有個收十個? 另外我完全不知道copy在這裡能作什麼事...它只是作容器內容的複製而已... ※ 編輯: ccbruce 來自: 122.116.57.76 (11/21 00:28)

11/21 00:13, , 7F
不考慮用boost::spirit嗎? http://boost-spirit.com/
11/21 00:13, 7F

11/21 00:15, , 8F
又沒說你這是作業文, 連自己要做的東西都還不清楚, 怎
11/21 00:15, 8F

11/21 00:16, , 9F
麼寫得出好的程式?
11/21 00:16, 9F

11/21 00:16, , 10F
從你「但是BNF還沒有完全想好, 所以程式是邊想邊改」
11/21 00:16, 10F

11/21 00:17, , 11F
你先理清遇到的敵人是誰, 你要用什麼工具打他, 工具是
11/21 00:17, 11F

11/21 00:18, , 12F
不是有現成的, 全部都分析好了才能寫出好程式, 好程式
11/21 00:18, 12F

11/21 00:18, , 13F
不是從爛程式慢慢改來的OK ?
11/21 00:18, 13F

11/21 00:29, , 14F
我看你的回文我只能給噓了...我不知道love大哪句話有問題...
11/21 00:29, 14F
我的問題很簡單, 剖析rc檔。把裡面不同國家的所有字串(只要是資源裡的所有用双引號括 起來的)全給塞到excel裡, 並且加上它們的Resource ID。以前弄剖析器我是用bison, 但 是bison產生出來的程式碼對UCS-16消化不良( 也許我程度不好)。所以才試著自己土法鍊 鋼。說BNF沒想好,也不全然, 因為rc的spec就有了。 要寫個能跑的剖析器當然很快就能搞 定, 事實上我已經寫好了。只是要寫個漂亮的東西就難多了, 不是嗎?也許是我表達能力不 好, 總之看來這裡是找不到我要的答案了。 ※ 編輯: ccbruce 來自: 122.116.57.76 (11/21 00:40) ※ 編輯: ccbruce 來自: 122.116.57.76 (11/21 00:45)

11/21 00:52, , 15F
命名又是A又是B的,大部份人看一眼就不想看了
11/21 00:52, 15F

11/21 00:53, , 16F
又怎麼期待大家能幫你什麼呢
11/21 00:53, 16F

11/21 00:55, , 17F
11/21 00:55, 17F

11/21 00:58, , 18F
我大概知道你想做什麼了@_@ #1CXxZm4d
11/21 00:58, 18F

11/21 01:05, , 19F
樓上幾位真是好人..
11/21 01:05, 19F

11/21 13:47, , 20F
看不懂 sunneo貼的文章是想要處理C++的code嗎
11/21 13:47, 20F

11/21 14:58, , 21F
其實是我貼錯了 我想貼得是yoco大介紹的yard
11/21 14:58, 21F

11/22 02:08, , 22F
嗯... ++看不懂;
11/22 02:08, 22F
文章代碼(AID): #1Cvz5glN (C_and_CPP)