gawk1.1源码分析01

gawk1.1源码分析01
因为ruby0.49的代码量较多,而且其正则表达式的算法和gawk的很像。于是,觉得还是先看gawk吧。毕竟对gawk也较熟悉,语言也较少,代码也少。应该是先有awk,perl,ruby等语言,先从源头来理解吧。
但昨天编译gawk1.1总是不成功。甚至修改awk.y还是不行。加上stdlib.h等头文件又与其自身的malloc等文件冲突,于是看自己以前是如何编译的。自己以前,也没写详细
于是,重新打开一个新的ubuntu16.04,因为我以前为了学rails,新下了几个ubuntu,安装bison,再编译,居然只是提醒bcmp_trans函数的使用在定义之前,于是把其定义代码挪到前面,再编译,就成功了。
这里,我说一下,我是用的三星笔记本,装的win10,再在应用商店里安装ubuntu16.04,
    安装make,gcc,bison
再wget http://mirrors.nju.edu.cn/gnu/gawk/gawk-1.01.tar.gz
tar -zxvf gawk-1.01.tar.gz
编译sudo make
修改bcmp_trans的定义
再sudo make
就在当前目录下生成了gawk文件,就可以折腾了。
先看awk.h,其中有一个超级难的结构体,反正没看懂,有一个enum,这个基本看懂了。
再看debug.c其中有一个nnames[]与enum中的定义完全一致。
再分析awk1.c找到如何进行调试。
echo "this is" |./gawk '{print $1}'
echo "this is" |./gawk '{print $1}'
test02
this
我对awk1.c进行了修改,增加打印test02,这样,可以边修改边分析源码了。
正则表达式先不看,反正只要会用就行了。而obstack.c好象是进行内存分析,也不管,而awk.y好象进行了语法分析,要学习bison用法,其关键在于bison如何与awk1.c进行协调。
现在看来,基本对awk的整体代码入门了。
上午,对awk1.c进行了初步的浏览,发现是把awk的源码读进lexptr指向的字符串中。再调用 yyparse(); 进行解析,不明白,好象,再把结果写到 expression_value中去,真是头痛,因为我对bison不熟悉,我要赶紧去学bison了。
 

猜你喜欢

转载自blog.csdn.net/woshiyilitongdouzi/article/details/86409549