前两天看了一段ruby代码,特别是昨天把ruby0.49的代码进行编译,搞了半天,感觉抓不住要领。编译不成功,于是很沮丧。
晚上,就进入sample目录中,看测试代码。把测试代码执行一下,感觉作者确实很不错,最早版本的测试,在2点几的版本中,稍微修改后,居然能执行,也算是不错的了。
ruby0.49的代码才23000行,可看起来,就是摸不着头脑。没有一个整体的框架,不知如何下手。一顿乱翻后。感觉还是太难了。
于是早上就找awk的源码,这次找到了1.0.1的版本代码,代码也少,才9千行。
这个代码就少了,其中处理正则表达式的就占了2000行,先学会正则表达式的使用。想在网上找资料,可很少,大部分都是python里的re包,于是看regex.c发现很好,其中有测试代码,于是加上加上进行编译的宏
#define test
,再进行编译,发现报错,说bcopy,bzero等函数找不到,于是就学这几个函数的使用,在网上找资料,再写测试程序,再修改。再编译,居然成了。
于是测试,但测试结果看不懂。学会了正则表达式的使用,知道几个函数用法,然后把实现算法进行阅读,发现作者没有用递归算法。真是牛人。
大致思路,还是先根据正则串生成内部格式,再去匹配串。但其中的思路就比上次那1000行的正则表达式难多了。
我想把全部的代码编译,在windows下搞的。先是没装bison,装了后,在makefile中,把cc改为gcc
还是报一堆错。无奈去linux下编译,报的错更多。说自定义的malloc和系统自带的有冲突什么的。看来,编译不了。
就三个文件awk1.c,awk2.c,awk3.c,另一个awk.y是bison的,这几个文件真难啃,不知如何下手。
看来,真要复习一下编译原理,还要学学bison,
时间真快,一晃就晚上9点了。我想还是要有一个整体框架,再各个击破。其中awk.h中定义了几个超多成员的struct,真不知这样是干什么?
明天接着看吧,