-
一个用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
-
Simple calculator source. There are four computing involution, such as computing...
简单的计算器源码。有四则运算乘方等运算,支持鼠标-Simple calculator source. There are four computing involution, such as computing, support for mouse
- 2023-03-04 06:50:02下载
- 积分:1
-
红黑树的C++实现
红黑树的C++实现,包括红黑树的插入,删除,左右旋转等操作,还包括了二叉树的基本操作(用于红黑树的实现)。
- 2022-03-14 12:23:01下载
- 积分:1
-
整理分享:常用的数学运算程序源代码
包括常用的几种数学运算程序的C++代码,例如矩阵运算...
整理分享:常用的数学运算程序源代码
包括常用的几种数学运算程序的C++代码,例如矩阵运算-collate share : common mathematical procedures used in the source code of several mathematical programs in C code, for example, matrix operations, etc.
- 2023-06-02 04:45:03下载
- 积分:1
-
I have written, SAT question of the Johnson algorithm source code, please advice
自己编写的,SAT问题的Johnson算法源代码,请多多指教-I have written, SAT question of the Johnson algorithm source code, please advice
- 2022-05-26 00:52:16下载
- 积分:1
-
《matlab6.5辅助小波分析与应用例程》书籍源代码
《matlab6.5辅助小波分析与应用例程》书籍-源代码。书籍内容:第一章 小波分析基础理论第二章 MATLAB 6.5小波分析示例第三章 MATLAB6.5小波包分析示例第四章 面向对象的设计及应用第五章 小波函数的添加第六章 小波分析用于信号处理 请点击左侧文件开始预览 !预览只提供20%的代码片段,完整代码需下载后查看 加载中 侵权举报
- 2022-02-04 14:09:28下载
- 积分:1
-
RFID FOR ABSEN
#包括;
- 2023-07-23 06:25:03下载
- 积分:1
-
该程序完成马尔可夫分析,马尔可夫分析是运筹学中很重要的一个技术。...
该程序完成马尔可夫分析,马尔可夫分析是运筹学中很重要的一个技术。-Markov analysis, operations research, Markov analysis is a very important one technology.
- 2023-03-06 13:55:03下载
- 积分:1
-
Extended Kalman Filter
Extended Kalman Filter-a toolkit
- 2022-04-29 02:05:23下载
- 积分:1
-
java实现用遗传算法求解迷宫问题
毕业设计的代码,是使用java语言来实现的,是用遗传算法来求解迷宫问题,其中代码有详细的注释
- 2023-01-17 05:50:03下载
- 积分:1