不到1000行的正则表达式源码分析04

不到1000行的正则表达式源码分析04
今天购买了一个usb变多个usb的玩意儿,感觉很神奇,一个usb口可以当多个口用,如果同时连接鼠标、键盘,系统是如何处理的呦,难道象令牌环网,传递一个令牌?太神奇。
感觉今天基本能把代码串起来了。
在grep.c中,执行时
echo "foooo" | ./ogrep 'fo*'
先执行re_comp,把'fo*'变为
chr f
clo chr o
再执行re_exec进行字串匹配。
在re_exec中,分三种情况:
1)如果是bol
     调pmatch进行匹配
2)如果是chr
     先从源串中找到一个与nfa相等的字串,再进行第3)
3)从源串第一个字开始匹配,如果匹配不上,就从下个字符开始,一直到结束。

pmatch呢,开始看得太细,现在从宏观上一看,其逻辑也很好理解。就是把nfa编译的结果逐字与源串比较,如果不等就报错,如果相等就继续。
可能按程序的执行过程来理解,是比较好的。光看程序,不知它在执行中的地位,这样看,很容易迷失方向。
而按程序执行的思路来理解,就好了。今天先到这里。明天再继续吧。
宏观上理解了,就完成了一大半,明天就把它串起来,把没理解的细节理解。再多加printf语句,进行调试吧。
另外,这个匹配是nfa的,而ruby0.49中的,好象是dfa的。nfa是正则表达式主导,而dfa是文本主导,明天再细看吧。
 

猜你喜欢

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