貌似刚开学的时候装了个逼,和老师立了个flag说我要写个正则表达式引擎,然后学期末估计老师早就忘了这茬了,在历时3个月的懒癌发作下,终于在这学期末deadline的时候花了一个下午加晚上在没有网的房间写完了它,于是便有了这篇blog,本来想正儿八紧写篇论文,说不定毕业设计可以直接丢一篇这个走人,但第一觉得一个晚上写好的东西太low了,第二自己实在不适合写那种正经的论文,于是还是写从高中开始的一贯的乱七八糟体好了.
主要写自己写的时候遇到的一些瓶颈,例如茹何储存一个图,茹何遍历一个图,茹何表示一个集合之类基础的问题,等不再赘述.请自行查阅数据结构,C++ STL之类的相关书籍,首先介绍一些基础知识

1.DFA.NFA.正则表达式
DFA即有穷状态自动机,是一个有向图,其中每条边有有一个字母.这个图有唯一一个起始点 q0 ,有一些点是终止状态,现在有一个字符串str,当我们就从起点q0开始,根据下一个字符,在图中走到不同的点上,当整个字符串走完,我们必定停在某个点上,如果那个点是终止状态,那么我们称这个DFA接受这个字符串,反之不接受
/*************************************/
/* 形式化定义DFA:
/* DEF:DFA是一个五元组(Q,∑,δ,q0,F)
/* 其中Q是一个有穷集合,叫做状态集
/* ∑是一个有穷集合,叫做字母表
/* δ是一个映射 δ:Q × ∑ ->Q
/* q0属于Q是起始状态
/* F是Q的子集是终止状态
/*
/* 这个定义前三个定义了一个图G,别忘了图的定义G<V,E,δ> 第四个定义了一个起始状态,第五个定义了终止状态的集合,所以这个定义和上面的说法是定价的
/*
/*************************************/

NFA即非确定有穷状态自动机,简单来说,对于DFA,在每个点,不同的字符走到下一个点是确定的,而NFA则是不确定的,也就是

----------------------to be continue----------------------------------------------------------------------

reference:
[1] Michael Sipser "计算理论导引" 机械工业出版社
[2] Alfred V.aho Monica S.Lam Ravi Sethi Jeffrey D Ullman "Compilers:Pinciples,Techniques,&Tools Second Edition" 人民有点出版社影印
[3] 陈梓瀚(vczh) http://www.cppblog.com/vczh/archive/2008/05/22/50763.html
[4] Andrew W. "现代编译原理 C语言描述" 人民邮电出版社

(2015大作业)茹何优雅的手写正则表达式引擎(regular expression engine的更多相关文章

  1. 一款非常好用的boostrap的验证插件、再也不用自己手写正则表达式和js了

    基于jquery.bootstrap数据验证插件bootstrapValidator教程 bootstrap:能够增加兼容性的强大框架. 因为项目需要数据验证,看bootstrapValidator ...

  2. C++ 大作业资料总结

    一般 C++ 大作业都是用 Qt 来写,Qt 本身带了很多例子,详见:https://doc.qt.io/qt-5/qtexamples.html# 如果你想偷懒的话,直接拿来改就好,或者去 Gith ...

  3. 大数据应用期末总评——Hadoop综合大作业

    作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3339 Hadoop综合大作业 要求: 1.将爬虫大作业产生的csv文件 ...

  4. 【大数据应用期末总评】Hadoop综合大作业

    作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3339 一.Hadoop综合大作业 要求: 1.将爬虫大作业产生的csv ...

  5. 《Hadoop综合大作业》

    作业要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3339 我主要的爬取内容是关于热门微博文章“996”与日剧<我要 ...

  6. 菜鸟学IT之Hadoop综合大作业

    Hadoop综合大作业 作业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/3363 1.将爬虫大作业产生的csv文件上传到HDF ...

  7. 大数据应用期末总评Hadoop综合大作业

    作业要求来源于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3339 1.将爬虫大作业产生的csv文件上传到HDFS 此次作业选取的 ...

  8. 【Win 10 应用开发】手写识别

    记得前面(忘了是哪天写的,反正是前些天,请用力点击这里观看)老周讲了一个14393新增的控件,可以很轻松地结合InkCanvas来完成涂鸦.其实,InkCanvas除了涂鸦外,另一个大用途是墨迹识别, ...

  9. 剖析手写Vue,你也可以手写一个MVVM框架

    剖析手写Vue,你也可以手写一个MVVM框架# 邮箱:563995050@qq.com github: https://github.com/xiaoqiuxiong 作者:肖秋雄(eddy) 温馨提 ...

随机推荐

  1. iOS  UDP 广播 AsyncSocket 用法

    因为业务需要,需要用广播发送一个字段,在iOS开发中,用到了AsynSocket. 1.定义一个属性,负责发送和接受数据 #define YX_Local_Host @"255.255.25 ...

  2. asp.net mvc集成log4net

    第一步:在web项目的引用中添加log4net.dll,可以通过Nuget直接下载并安装: 第二步:在web项目的web.config配置文件的configuration节点内添加log4net节点, ...

  3. 博客-从github ghpage 转回通知

    博客迁回 这是我的github博客:http://www.flyfishonline.com/ 原因一 某QQ朋友:"......看了你的简历,根据你(github)博客看,似乎简历包装的过 ...

  4. idea报错:The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configu

    java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecognized or represents more tha ...

  5. js 上传图片

    <div class="block-input" style="height: 90px"> <span><i class=&qu ...

  6. CAD交互绘制批注(网页版)

    js中实现代码说明: 动态拖放时的绘制事件: function DynWorldDrawComment( pCustomEntity, pWorldDraw, curPt) { // 得到绘制参数. ...

  7. lucene4.10.2实例(增删改查)

    最新jar和src免费下载:http://download.csdn.net/detail/u011518709/8248403 lucene 包的组成结构:对于外部应用来说索引模块(index)和检 ...

  8. url地址数据参数转化JSON对象(js三种方法实现)

    当我们用get方法提交表单时,在url上会显示出请求的参数组成的字符串,例如:http://localhost:3000/index.html?phone=12345678901&pwd=12 ...

  9. mysql基本优化

    文件打开数 show status like "%Open_files%" Open_files 133 show VARIABLES like "%open_files ...

  10. 如何用纯 CSS 创作背景色块变换的按钮特效

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/XYKdwg 可交互视频教 ...