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

不到1000行的正则表达式源码分析06
今天想谈NFA与DFA的区别,对代码来说。
我喜欢购书,只要是经典的书,就买了。但当时也许看不懂。记得,《设计模式》一出来时,就购买了。可总是看不懂。直到看了程杰写的《大话设计模式》才基本看懂。
其实,学正则表达式,有本经典书《精通正则表达式》也是经典,买了后,第4章,讲原理的那章,基本没看懂。等学习算法有一定理解后,再加上研读源码,才基本把第4章理解,因为不管如何,书籍总是比源码要容易理解。
在《精通》一书中,讲了NFA和DFA的区别。那oz的regex.c究竟是NFA还是DFA呢?
我们把re_pmatch子程序拿出来。
static char *
pmatch(char  *lp,CHAR *ap)
{
    while((op=*ap++) !=END) 
        switch(op) {
        case CHR:
            if (*lp++!=*ap++)
                return 0;
            break;
        …………
        }

}
ap指向的是编译后的正则表达式中间代码,此时是读中间代码,再与文件进行匹配。因此时,正则表达式主导匹配过程的,是NFA,而ruby0.49中的正则表达式是DFA的,因为它的那个表的名字是DFA.哈哈哈!
其实,因为ruby0.49中的正则表达式我没看懂,但应该是文本主导的。也许我要去读ruby0.49中的源码的。但我觉得,这个oz的代码,真漂亮。
 

猜你喜欢

转载自blog.csdn.net/woshiyilitongdouzi/article/details/86306616
今日推荐