gawk1.01源码分析——进行调试2

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


gawk1.01源码分析——进行调试2
今天读代码时,发现我对awk2.c中如何生成解析树的过程还是很模糊。于是想上网搜索资料。发现没有。于是,心想,没人写,那我就再接着写吧。不指望有多少人看,就当成是把自己分析源码的心得、想法进行总结。就当写日记一样。
以前读源码,因为编译不了,总是纸上谈兵,但读着读着,发现不行。因为我无法验证我的理解对不对?而且也没有人和我交流,那不行。还是要把程序编译成功,进行调试。这样才能真正的读懂代码。
当你不调试时,可以能代码的整体结构有一个了解,但不能达到深刻的理解。
于是,又找到以前修改过的gawk源码,再进行调试。
昨天学学bison,因为gawk1.01源码中awk.y这个文件总是报归约/归约冲突。
今天接着调试gawk源码。把debug.c中的读懂了。接着看awk.y,前面一段是bnf相关,关键是后面的处理。如下:
yylex()
{
  如果要处理正则表达式,
    很长一段逻辑,我省略了。
  switch(c=*lexptr++) {
    case 0:
    等等

  }
}
那个主要的处理逻辑,好象是进行了词法分析。人工写了flex能处理的那一段。
而awk2.c中把返回的词,进行分析后,写进语法树中。
对awk2.c这个没看懂。为了看懂它,我需要把bison用户手册学一遍。

前段时间有些想放弃读gawk1.01版本,心想,这个调不通,还不如干脆读版本呢,我的电脑上安装的gawk4.1.0版本,我从网上下载这个版本的源码,居然有5万多行,心想,算了,还是读1.01版本吧。

把1.01看懂后,就学着读ruby0.49版本。我现在发觉,matz肯定是通读了gawk的源码,因为ruby0.49的结构和gawk差不多。你看ruby中也有BEGIN,END块,在ruby0.49中,也是用bison进行语法分析,matz也象gawk一样,手工进行词法分析,没有用flex。等等。

前段时间读ruby
的一些gem,如algorithms0.6的源码,涉及到fib堆的算法,红黑树算法没看懂,其它的倒还是很流畅的。但对ruby到底如何运行的,还是不懂。于是就接着读matz写的《编译语言的设计与实现》,发现,作者写ruby的思路和gawk一样,感觉还是要读gawk的源码。
我真希望matz能出一本,详细介绍如何设计出ruby的书。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值