gawk1.1源码分析01

165 篇文章 0 订阅
107 篇文章 1 订阅

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了。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值