-
一个用MASM写的正则表达式引擎
此正则表达式引擎属于正统的NFA引擎,基本兼容Perl,简单说一下引擎是怎么实现的:
首先做一个递归下降语法分析,利用栈把正则表达式转换成NFA(以有向图的形式表现),再遍历NFA判断是否能到达完成节点。
实现正则表达式匹配的各种复杂功能的力量来自于回溯,而回溯的基础是栈,回溯能力是通过栈来达成的。
栈中保存了匹配路径中所有的状态,状态回溯就是出栈,状态匹配就是入栈。
除了回溯,一些扩展功能的实现也是通过栈来完成的,比如捕获和零宽断言,都要通过搜索或操纵栈来完成。
转换成NFA再匹配的好处是简化匹配和利于优化和DEBUG:因为不管再复杂的表达式转换成NFA之后只有边和节点组成,边和节点也只有顺序、分支、循环这三种形式组成。
详细原理说明看下面关于实现引擎的文章,第3条是我理解引擎匹配原理的入门参考。
支持GBK和UTF8编码
==参考和学习资料==
关于实现引擎的文章:
1、《Perl语言编程》第五章 书
2、《精通正则表达式》 书
3、构造正则表达式引擎 http://www.cppblog.com/vczh/archive/2008/05/22/50763.html 我的原理学习入门参考
4、NFA引擎匹配原理 http://blog.csdn.net/lxcnn/article/details/4304651
5、英文参考资料 请点击左侧文件开始预览 !预览只提供20%的代码片段,完整代码需下载后查看 加载中 侵权举报
- 2022-05-27 18:36:44下载
- 积分:1
-
kNN landsat
KNN算法碳映射
- 2022-03-13 15:07:39下载
- 积分:1
-
新型GA算法
一种好的改进遗传算法function [opy,optimy]=GA(pt,gennum,psize)% 输入参数:% pt m*n的加工时间矩阵(n是工件数目,m是机器数目)由已知给的T矩阵,可得n=100,m=10% gennum 迭代的次数(代数)% psize 种群的规模大小%输出参数:% opy 最优的Makespan值pc=0.9;%交叉因子pm=0.1;%变异因子[m,n]=size(pt);current_gen=1;%current_gen means the current generationnewgen=zeros(psize,n+1); %mewgen is the new generation of the populationnewgen(1:psize,1:n)=rand(psize,n);%主种群初始化,0-1之间的随机数 %Generalize the initial groupfather=zeros(2,n); %father is used to store the two genes for crossover and mutation avgen=zeros(1,gennum); %avgen is the matrix of the average of all the generationsoptimx=zeros(1,n);optimy=ones(1,gennum);%Generalize the initial groupfor i=1:psize [Ya,pop(i,1:n)]=sort(newgen(i,1:n));%种群排序,实数编码转换为自然数编码 随机生成的0-1之间的小数进行排序然后取每个从小到大数对应的位置 newg
- 2022-03-18 14:25:18下载
- 积分:1
-
阳历转阴历
阳历转阴历,在软件开发里经常用到。特别是生日推算,用阳历推阴历。一个很不算的算法,很实用,直接拿来用,省了不少事。
- 2022-03-04 08:05:02下载
- 积分:1
-
图像的复原
资源描述AppWizard has created this ImageProcessing application for you. This application not only demonstrates the basics of using the Microsoft Foundation classes but is also a starting point for writing your application.
- 2023-01-04 15:40:03下载
- 积分:1
-
Gabor_code
资源描述通过gabor进行特征提取,对鞋印的纹理进行提取,并且进行高斯滤波,提取的内容比较丰富,损失的信息比较少。并且gabor的各种属性也能使读者清楚地理解。
- 2022-07-07 11:41:03下载
- 积分:1
-
atical Graphic Plotter
Description: You can draw difficult mathematical graphs...
atical Graphic Plotter
Description: You can draw difficult mathematical graphs painlessly with this program. For example,
you can draw (x^3+2x+3)/(2x^2+x+1) easily with this program.
- 2022-03-24 05:07:34下载
- 积分:1
-
快速弦截法――数值分析,程序代码,参考数值分析课本,很简单的程序,大家一定看得懂...
快速弦截法――数值分析,程序代码,参考数值分析课本,很简单的程序,大家一定看得懂-rapid chord sheet-- numerical analysis code, the numerical analysis of reference books, a very simple procedure, They must understand the
- 2022-08-11 17:01:12下载
- 积分:1
-
线形方程组类:包括各种线性方程组的各种求解方法,非常方便调用
线形方程组类:包括各种线性方程组的各种求解方法,非常方便调用-Linear equations categories: including a variety of linear equations to solve a variety of methods, very convenient to call
- 2023-03-26 16:40:03下载
- 积分:1
-
鲍威尔,求极值的方法很容易使用和较高的精度。
鲍威尔法求极值,非常好用和精确度比较高。希望大家喜欢-Powell, seeking extreme value method is very easy to use and relatively high accuracy. Hope everyone likes
- 2022-01-26 06:54:33下载
- 积分:1