[问题] 看不太懂这串简单的程式码

楼主: zzss2003 (brotherD)   2017-08-15 13:56:21
网址: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哪里来的)。
有请各位前辈解惑一下小弟的疑问,谢谢。
作者: stucode   2017-08-15 14:15:00
左边的code是在解run-length encoding的资料google一下run-length encoding应该就懂了右边纯粹是某个吃左边emit资料的parser
作者: Lipraxde (Lipraxde)   2017-08-15 16:28:00
左边是在解压
作者: stucode   2017-08-15 17:02:00
那是解压缩的code 0xFF是一个记号 表示下一个getchar()读到的不是资料本身(字符) 而是资料长度(字符数)然后再下一个才是资料本身 接着用循环恢复压缩前的样子

Links booklink

Contact Us: admin [ a t ] ucptt.com