作者zzss2003 (brotherD)
看板C_and_CPP
标题[问题] 看不太懂这串简单的程式码
时间Tue Aug 15 13:56:21 2017
网址:
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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1502776585.A.01C.html
1F:→ stucode: 左边的code是在解run-length encoding的资料 08/15 14:15
2F:→ stucode: google一下run-length encoding应该就懂了 08/15 14:16
3F:→ stucode: 右边纯粹是某个吃左边emit资料的parser 08/15 14:17
查完後看不太懂左边的。假如今天资料是AAA,那照理说转出去的值会是3A。但我不觉得AA
A经过这列程式码转出来的会是3A。主要是我不太懂为什麽要拿C跟0xFF比,我的直觉告诉
我0xFF应该是一个变数吧?
※ 编辑: zzss2003 (60.248.26.157), 08/15/2017 15:46:03
4F:→ Lipraxde: 左边是在解压 08/15 16:28
5F:→ stucode: 那是解压缩的code 0xFF是一个记号 表示下一个getchar() 08/15 17:02
6F:→ stucode: 读到的不是资料本身(字元) 而是资料长度(字元数) 08/15 17:03
7F:→ stucode: 然後再下一个才是资料本身 接着用回圈恢复压缩前的样子 08/15 17:04