决定把轮子造的飞起,试着用 JAVA 写个正则引擎。要求:1. 纯 DFA,无需支持 捕获组 和 断言;2. 时间复杂度 O(n);3. 支持 ASCII 字符集,支持基本语法:支持'\w', '\W', '\s', '\S', '\d', '\D' 和 '.' 七个集合及其他单字符转义,支持 ?,...
分类:
其他好文 时间:
2015-05-17 09:13:12
阅读次数:
123
1.声明一个空数组,用来接收不同元素,利用两个for循环去遍历 1 var arr = [1,'a',56,'dj', 'dfa', 56, 'a'] 2 function qu(arr){ 3 var newArray=[]; 4 for(var i= 0; i < arr.len...
分类:
Web程序 时间:
2015-05-05 15:55:15
阅读次数:
197
1 var arr = [1,'a',56,'dj', 'dfa', 56, 'a'] 2 function qu(arr){ 3 var newArray=[];//定义一个空数组用来接收源数组中的元素 4 for(var i= 0; i < arr.length; i++) 5...
分类:
编程语言 时间:
2015-05-05 14:06:16
阅读次数:
237
原题:1、自己定义一个简单语言或者一个右线性正规文法示例如(仅供参考) G[S]:S→aU|bV U→bV|aQ V→aU|bQ Q→aQ|bQ|e2、构造其有穷确定自动机,如3、利用有穷确定自动机M=(K,Σ,f,S,Z)行为模拟程序算法,来对于任意给定的串,若属于该语言时,该过程经有限次计算后就...
分类:
其他好文 时间:
2015-04-21 22:00:31
阅读次数:
267
一个词法分析器生成程序: regex(BinTree) -> NFA -> DFA
分类:
其他好文 时间:
2015-04-19 12:59:10
阅读次数:
240
任务:
源文件->记号流
方法:
1. 手工构造
2. 自动构造
手工构造:
实现标识符与关键字通过转移图完成.
然后再通过hashtable特判即可.
自动构造:
Thompson算法将正则表达式转化为NFA
五种情况,两种基本的直接构造,三种复合的递归构造
子集构造算法 NFA-DFA
stack = []//遍历的结构
Q = []//所以的D...
分类:
其他好文 时间:
2015-04-18 11:33:41
阅读次数:
170
在网上看到的大部分采用DFA算法,大概思路如下:
1:DFA采用Map的hash机制,将敏感词单个拆分,以第1个字符为key,其他值依旧使用map相连,形成了大map套用小map..
2:遍历需要过滤的字符串,获取每一个字符,根据get(key)来检测是否为敏感词。
我最开始是想到用正则来提取数据中的敏感数据,然后获取敏感字所在索引位置,再利用StringBuilder.replace(start,end,str)来替换,但经过测试发现使用正则有2个问题:
1:因为是正则要整串匹配,所以效率慢,同样3...
分类:
其他好文 时间:
2015-04-16 17:39:07
阅读次数:
272
KMP算法理解
字符串匹配算法之KMP算法一直以来都很难理解,虽然知道要减少不必要的匹配,但是仍然不懂里面的思想,即使看着代码。后来看到(2)中博客中的解释才清晰了许多,
不至于在什么DFA,前缀表,部分匹配表等概念中迷失自己。主要的指导思想在于当发生不匹配的时候如何更有效的利用现在已经匹配的字符串的信息来加速移动过程,
部分匹配表的存在正是挖掘一个字符串中前缀和后缀中最长公共串,比...
分类:
编程语言 时间:
2015-04-14 21:33:53
阅读次数:
207
最近尝试写一下NFA到DFA转换的函数,用C++,但是想到集合的表示比较麻烦,一些高级的容器也还没学到,因此自己先写一个简单的collection类,1.0版本。 能实现的功能有:存储数字集合;能进行集合间比较O(N)及加O(M+N)减法O(N);能向集合中添加元素O(N)或删除元素O(N);...
分类:
其他好文 时间:
2015-03-31 10:34:49
阅读次数:
162