读gawk中正则表达式包

读gawk中正则表达式包
好几天没写博客了,感觉好象欠债没还一样。让人很是有种负罪感。
前几天冥想代码,感觉很有收获。就一股脑的回忆,把大脑当机器,在脑中执行代码。直到彻底理解。
先回忆,oz写的grep中正则表达式的源码,因为是nfa原理,感觉除了位操作相关的代码外,真是看懂了。
有了基础后,看gawk中regex.c,没看懂。于是看几篇介绍dfa的文章,
https://blog.csdn.net/chinamming/article/details/17166577
https://blog.csdn.net/cuiods/article/details/52673154
两位的写得很好。快速看完了,感觉对如何把nfa转为dfa的还是没有概念。尤其是闭包的感觉,总是感觉难懂。
于是重新打开gawk中regex.h,regex.c进行阅读。我单独编译了,再执行,再分析结果,根据结果读main程序,发现有些理解了。
但在那个存储dfa指定的表中,发现有buffer,fastmap两个,而fastmap存储转化后的结果,如[0-9]展开成0123456789,我不理解的是,你如何把buffer和fastmap两个结合起来使用呢?
还是那个dfa中,把正则表达式翻译成的中间代码没理解。也许,要先手工把正则表达式翻译成dfa代码,再自己试着执行。
总体感觉,读代码越来越顺畅了。突破了开始的难度后,路子越来越宽了。反复读awk.y,对gawk语言,真是越来越有感觉了。
先凑数吧。

猜你喜欢

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