-
一个用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
-
栈、队列、字符串和数组
表达式计算是实现程序设计语言的基本问题之一。也是栈的应用的一个典型例子。设计一个程序,演示用算符优先法或转换成后缀表达式方法对算术表达式进行求值的过程。 以字符序列的形式从终端输入语法正确的、不含变量的整数表达式。利用教科书表3.1给出的算符优先关系,或课件中给出的中缀表达式向后缀表达式转换的方法,实现对算术四则混合运算表达式的求值,并仿照教科书和课件中的例子演示求值中运算符栈、运算数栈、输入字符和主要操作变化的过程
- 2022-03-03 10:50:33下载
- 积分:1
-
FP增长频繁项集挖掘
资源描述FP-growth算法是一个程序来发现频繁项集(关闭和最大以及发电机)与FP-growth算法(频繁模式增长[韩等。2000),表示事务数据库的前缀树,这是加强与链接,组织节点到列表中指同一项目。搜索是通过突出的前缀进行的树,递归地工作结果,并修剪原始树。实施还支持封闭和过滤最大项目集有条件项集库在[ 2003 ]格兰恩和朱,虽然在程序中使用的方法不同于它采用自顶向下的前缀树而不是FP树。它不包括FP树的巧妙的实现两个整数数组作为[ 2004 ] rasz建议。自版本与6上面所用的程序也可以用来查找关联规则。
- 2023-04-11 15:50:04下载
- 积分:1
-
这个程序可以实现最优的2
这个程序可实现最优二分检索树的构造,绘制和检索,请在Turboc 2.0下运行。-this procedure can achieve optimal two-tree structure retrieval, mapping and retrieval, please Turbo running under 2.0.
- 2022-06-18 15:45:21下载
- 积分:1
-
PLS 的人脸识别
这个 matlab 文件是关于人脸识别的源程序。人脸识别方法是偏最小二乘法,简称 "PLS"。识别率可达 92%与我们脸样本。源文件中载有详细的注解,帮助读者理解算法原理。读者请尊重于 author 的艰苦的工作,并且不要不要将它用于商业。感谢您下载和阅读我的脸识别 matlab 文件。希望你有良好的阅读杂志,从我的工作得到很大的帮助。
- 2022-07-21 10:32:39下载
- 积分:1
-
多线程快速排序
多线程并行的快速排序的实现,使用多线程实现递归排序,使用标准模板库STL实现最后的排序
- 2022-06-03 05:38:46下载
- 积分:1
-
光纤传播常数计算
光纤模场分布和传播常数,输入模式的阶数,计算得到各类模式的模场分布。在其中修改参数,至少可以计算5层光纤结构。
- 2022-08-24 06:43:40下载
- 积分:1
-
基于遗传算法的土地利用优化
以某地区一部分土地利用现状为基本数据,通过设置目标函数和约束条件,使用遗传算法进行土地利用优化,实验表明优化效果优良。
- 2022-02-01 23:44:07下载
- 积分:1
-
C#,DotNet FrameWork2.0,计算4张牌四则混合运算以后等于24的算法源码...
C#,DotNet FrameWork2.0,计算4张牌四则混合运算以后等于24的算法源码-C#, Delegate FrameWork2.0. Calculation four licensing mixed four to 24 after the operator of the algorithm source code
- 2022-01-29 03:57:32下载
- 积分:1
-
这是一个集交互式和命令式于一体的一个程序。
% 首先程序提示你输入数据,如果你输入的数据正确,则程序继续进行。
% 如果你输入的x,y的大小...
这是一个集交互式和命令式于一体的一个程序。
% 首先程序提示你输入数据,如果你输入的数据正确,则程序继续进行。
% 如果你输入的x,y的大小不一致,程序会提示你输入数据有误,然后程序返回再次让你输入数据。
%待你输入数据正确后,程序会给你一段提示信息,
% 通过下面的交互式图形,你可以事先估计一下你要拟合的多项式的阶数,方便下面的计算
% polytool()是交互式函数,在图形上方[Degree]框中输入阶数,右击左下角的[Export]输出图形
% 回车打开polytool交互式界面
% 待你回车后,交互式图形界面打开,你可以在图形上方[Degree]框中输入阶数观察多项式拟合的图形,
% 选择置信区间最小的多项式阶数,以便在下面使用。
% 待你选择好所要拟合的多项式阶数后,程序提示你回车继续进行拟合。
% 待你回车后,程序提示你输入拟合的阶数,
% 待你输入拟合的阶数后,回车后会显示拟合多项式相关的数据。
% 最后程序提示你输入所需拟合的数据点,输入所需拟合的数据点,就会得到相应的结果。
% 如果没有所需要拟合的数据点,直接回车跳过。
% 程序结束。
% 最小二乘法多项式拟合-err
- 2022-08-20 16:54:56下载
- 积分:1