-
一个用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
-
基于ARM的AD读取程序
基于ARM的AD读取程序,通过改变电位器的值大小,可以通过超级终端显示AD的数值变化,实测可用,目标板是s3c2410
- 2022-07-08 07:35:44下载
- 积分:1
-
3D Delaunay 算法
此程序计算凸壳、 Delaunay 三角剖分、 alpha 形状和 Voronoi 卷,使用增量式算法和精确的算法。若要安装,请键入"做",可能调整生成文件后。
- 2022-02-06 23:32:47下载
- 积分:1
-
二维函数数值最优化方法-复合形法程序
C语言编写的复合形法程序。属于计算数学算法内容,可用于求解二维函数的数值最优化问题,通过简单修改可解多维函数问题。
- 2022-04-19 09:49:37下载
- 积分:1
-
webrtc中提取的AEC库
webrtc中提取的AEC库,从webrtc开源项目中提取,可以使用,可以作为学习之用,现在关于开源aec算法的
代码少,这个确实还不错
- 2022-02-09 14:38:11下载
- 积分:1
-
Simulation of a WCDMA FDD Downlink transmission
The WCDMA Physical Layer Demo consists of an end-to-end (transmitter-to-receiver) simulation of the Frequency Division Duplex (FDD) Downlink physical layer for several Dedicated Channels (DCH) as specified by the 3GPP standard (Release 99). The current ZIP file includes three different models: channel coding, spreading an
- 2022-08-20 13:06:40下载
- 积分:1
-
自相关函数求延迟时间
运用自相关函数求混沌时间序列的延迟时间,使用matlab工具编程实现自相关函数求延迟时间;运用自相关函数求混沌时间序列的延迟时间,使用matlab工具编程实现自相关函数求延迟时间;运用自相关函数求混沌时间序列的延迟时间,使用matlab工具编程实现自相关函数求延迟时间;
- 2022-01-21 05:57:18下载
- 积分:1
-
MIMO通信系统模型
应用背景
随着4G-LTE技术的逐步发展,人们对通信质量和通信速度的要求越来越高,MIMO技术可实现多输入多输出,增大系统数据的吞吐量。
关键技术该资源为MIMO-OFDM通信系统模型,采用STBC编码进行预编码,在MATLAB下搭建模型,由训练序列获得信道信息来进行接收端的译码工作。
- 2023-02-10 14:20:03下载
- 积分:1
-
地铁乘坐问题
为引导旅客合理利用线路资源,解决交通瓶颈问题,该市制定了票价策略:
每条线路可以单独购票,票价不等。
允许购买某些两条可换乘线路的联票,联票价格低于分别购票的价格和。
单线票价和联合票价由文件price.txt给出,形式如下:
线1 180
……
线13 114
线1,线2 350
线1,线10 390
……
文件price.txt中,每行数据表示一条单线或联线的票价。线名与票价间用空格分开。如果是联线,两线名之间用逗号分开,并且规定联线只能包含两条可换乘的线路。
现在的问题是,根据这些已知的数据,计算从A站到B站最小花费和可行的换乘方案。比如,
- 2023-08-01 18:40:03下载
- 积分:1
-
HuffmanTree
定义HuffmanTree的数据结构(二叉树),实现输入一组数据后自动生成HuffmanTree。提供HuffmanTree的层次遍历算法。
- 2022-02-20 04:35:14下载
- 积分:1