登录
首页 » 算法 » 一个用MASM写的正则表达式引擎

一个用MASM写的正则表达式引擎

于 2022-05-27 发布 文件大小:678.10 kB
0 245
下载积分: 2 下载次数: 1

代码说明:

此正则表达式引擎属于正统的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%的代码片段,完整代码需下载后查看 加载中 侵权举报

下载说明:请别用迅雷下载,失败请重下,重下不扣分!

发表评论

0 个回复

  • 非Steffensen方法
    Steffensen method for non-linear equations in C
    2022-08-20 07:16:26下载
    积分:1
  • n皇后问题的进阶解法,算法简单,注意输入的N可能没有解,比如2...
    n皇后问题的进阶解法,算法简单,注意输入的N可能没有解,比如2-n Queen of the intermediate solution, the algorithm is simple, pay attention to the N input may not solved, such as the two
    2022-07-08 20:45:07下载
    积分:1
  • 这是对一维时间序列进行归一化计算的matlab程序
    这是对一维时间序列进行归一化计算的matlab程序-This is the one-dimensional time series to a calculation procedure of Matlab
    2023-09-04 18:25:03下载
    积分:1
  • RSA编程实验
    本源码实现了RSA算法。其中用libtomcrypt第三方库实现,包括加解密。不需要自己编写加解密算法代码,只要调用第三方库中国的代码即可实现,为你省去了很多时间和精力
    2022-09-10 23:40:03下载
    积分:1
  • C++ ItemCF
    UserCF和ItemCF是协同过滤中最为古老的两种算法,在top-N的推荐上被广泛应用。这两个算法之所以重要,是因为他们使用了两个不同的推荐系统基本假设。UserCF认为一个人会喜欢和他有相同爱好的人喜欢的东西,而ItemCF认为一个人会喜欢和他以前喜欢的东西相似的东西。这两个假设都有其合理性。根据我的测试,用UserCF和ItemCF做出的推荐列表中,只有50%是一样的,还有50%完全不同。但是这两个算法确有相似的精度。所以说,这两个算法是很互补的。我一直认为这两个算法是推荐系统的根本,因为无论我们是用矩阵,还是用概率模型,我们都非常的依赖于前面说的两种假设。如果用户的行为不符合那两种假设,推荐系统就没必要存在了。因此我一直希望能够找出这两种算法的本质区别。他们有相似的精度,但是coverage相差很大,ItemCF coverage很大而UserCF很小。我还测试了很多其他指标,不过要从这些表象的指标差异找出这两个算法的本质区别还是非常困难。不过上周我基本发现了这两个算法推荐机理的本质区别。我们做如下假设。每个用户兴趣爱好都是广泛的,他们可能喜欢好几个领域的东西。不过每个用户肯定也有一个主要的领域,对这个领域会比其他领域更加关心。给定一个用户,假设他喜欢3个领域A,B,C,同时A是他喜欢的主要领域。这个时候我们来看UserCF和ItemCF倾向于做出什么推荐。结果如下,如果用UserCF, 它会将A,B,C三个领域中比较热门的东西推荐给用户。而如果用ItemCF,它会基本上只推荐A领域的东西给用户。因为UserCF只推荐热门的,所以UserCF在推荐长尾上能力不足。而ItemCF只推荐A领域给用户,这样他有限的推荐列表中就可能包含了一定数量的不热门item,所以ItemCF推荐长尾的能力比较强。不过ItemCF的推荐对某一个用户而言,显然多样性不足。但是对整个系统而言,因为不同的用户的主要兴趣点不同,所以系统的coverage会很大。显然上面的两种推荐都有其合理性,但都不是最好的选择,因此他们的精度也会有损失。最好的选择是,如果我们给这个用户推荐30个item,我们既不是每个领域挑选10个最热门的给他,也不是推荐30个A领域的给他,而是比如推荐15个A领域的给他,剩下的15个从B,C中选择。认识到这一
    2022-03-26 08:57:57下载
    积分:1
  • heat_mpi是Fortran90程序解决了一维热传导方程的时间依赖性…
    此程序用有限差分解一维热传导方程,演示了MPI的使用方法。-HEAT_MPI is a FORTRAN90 program which solves the 1D Time Dependent Heat Equation using MPI
    2023-04-03 21:25:03下载
    积分:1
  • 八皇后问题的解法,非常好,请大家看一下,谢谢了
    八皇后问题的解法,非常好,请大家看一下,谢谢了-8 Queen" s problem solution, very good, please look at, I would like to thank the
    2022-01-28 01:59:41下载
    积分:1
  • 顺序表的实现
    资源描述大家好,这是我大学写的数据结构顺序表的实现,非常有参考价值
    2023-08-20 13:45:03下载
    积分:1
  • 改进的ica方法
    自己写的代码,用改进的ica方法实现盲源分离,效果比传统的盲源分离要好很多,可以直接运行实现。
    2022-07-19 16:58:43下载
    积分:1
  • 压缩算法LZW的研究代码
    此代码是LZW的算法实现,对学习LZW算法有一定的帮助,有兴趣的朋友可以下载来看看,值得学习!
    2022-07-22 13:15:49下载
    积分:1
  • 696516资源总数
  • 106914会员总数
  • 0今日下载