[問題] 看不太懂這串簡單的程式碼

看板C_and_CPP作者 (brotherD)時間8年前 (2017/08/15 13:56), 8年前編輯推噓0(007)
留言7則, 2人參與, 最新討論串1/1
網址:https://www.chiark.greenend.org.uk/~sgtatham/coroutines.html 網頁一開始的兩個程式碼 左邊:getchar裡面應該已經有一個陣列,且在陣列裡已經預先放置好一連串的資料了對吧? 所以一開始先從陣列裡面拿出第一筆資料D1放進C,如果是EOF就跳出while,如果D1等於 0xFF,則再把D2放到len、D3放進C,接著第二個while則一直發送c(此時在c裡面的值是D3) ,發到len(D2)裡面的值為0為止;如果D1不等於0xFF,則發送D1。 我覺得奇怪的點是,為什麼D1等於0xFF時,要把len(d2)當作條件的變數,然後狂發送D3, 不太懂這邊的意義在哪裡。 右邊:一開始一樣從陣列裡拿出D1放進C,如果是EOF則跳出while,如果D1為alphabet,則 把C add to token(不太懂add to token是什麼意思),接著再把D2放進C,如果D2也是alp- habet則add to token,直到Dn不為alphabet為止。然後就執行got_token(看不懂這行在幹 嘛),接著不為alphabet的那個Dn也被add to token(為什麼,我一直認為是alphabet的資 料才會被放進token),最後在執行got_token(PUNCT)(不知道PUNCT哪裡來的)。 有請各位前輩解惑一下小弟的疑問,謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.248.26.157 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1502776585.A.01C.html

08/15 14:15, , 1F
左邊的code是在解run-length encoding的資料
08/15 14:15, 1F

08/15 14:16, , 2F
google一下run-length encoding應該就懂了
08/15 14:16, 2F

08/15 14:17, , 3F
右邊純粹是某個吃左邊emit資料的parser
08/15 14:17, 3F
查完後看不太懂左邊的。假如今天資料是AAA,那照理說轉出去的值會是3A。但我不覺得AA A經過這列程式碼轉出來的會是3A。主要是我不太懂為什麼要拿C跟0xFF比,我的直覺告訴 我0xFF應該是一個變數吧? ※ 編輯: zzss2003 (60.248.26.157), 08/15/2017 15:46:03

08/15 16:28, , 4F
左邊是在解壓
08/15 16:28, 4F

08/15 17:02, , 5F
那是解壓縮的code 0xFF是一個記號 表示下一個getchar()
08/15 17:02, 5F

08/15 17:03, , 6F
讀到的不是資料本身(字元) 而是資料長度(字元數)
08/15 17:03, 6F

08/15 17:04, , 7F
然後再下一個才是資料本身 接著用迴圈恢復壓縮前的樣子
08/15 17:04, 7F
文章代碼(AID): #1Paeq90S (C_and_CPP)