#include#define MAX 100typedef struct //构造一个邻接表 用于存储NFA{char name;char line[MAX]; }node; void tran(){ //专门做语句的转换操作 } void automata(char R[],i...
分类:
其他好文 时间:
2015-12-03 20:46:40
阅读次数:
167
#include#define MAX 100typedef struct //构造一个邻接表 用于存储NFA{ char name; char line[MAX];}node;void tran(){ //专门做语句的转换操作}void automata(char R[],int i){ i...
分类:
其他好文 时间:
2015-12-03 20:41:42
阅读次数:
163
我用java实现了一个正则表达式到NFA的转换程序,以下是我的代码packagecom.siwanghu.regextoNFA;
publicclassNode{
privateintid;
privatestaticintID=0;
publicNode(){
this.id=ID++;
}
publicintgetId(){
returnid;
}
publicstaticvoidreset(){
ID=0;
}
@Over..
分类:
编程语言 时间:
2015-10-24 06:46:53
阅读次数:
467
正则表达式的引擎主要由2种:NFA和DFA。 java的正则基于的是NFA,表达式主导,匹配成功即成功,正则nfa|nfanot匹配字符串nfanot的结果是nfa。 DFA是文本主导,会记录所有的匹配。 使用正则表达式时需要注意回溯,否则可能会导致栈溢出。下面是一个例子程序:Stri...
分类:
其他好文 时间:
2015-09-20 13:06:10
阅读次数:
151
#include
#include
#include
#include
#include
#include
#define MAX 100
using namespace std;
struct edge
{
char preNode; //节点表示只能用单个字符
char nex...
分类:
其他好文 时间:
2015-07-10 09:31:38
阅读次数:
211
??
构造Half(L)的NFA
搬运自我的百度空间
原创文章,转贴请贴出处
偶尔来点纯理论问题。这是一道高级算法作业题,L是正则语言,语言B是L中所有字符串对半开的前一半,证明B也是正则的。
目的明确,构造B的一台NFA,非确定型有限状态机。
要用到“平行NFA”的概念。比如举例另外一个问题:如何判断一个字符串既是正则语言A又是正则语言B?可以...
分类:
其他好文 时间:
2015-06-14 09:28:44
阅读次数:
1306
后缀自动机是一种确定性有限自动机(DFA),它可以且仅可以匹配一个给定串的任意后缀。构造一个可以接受一个给定串的所有后缀的不确定性有限自动机(NFA)是很容易的,我们发现我们用通用的将NFA转换成对应DFA的算法转换出来的DFA的状态数都很小(O(n)级别的,远远达不到指数级别)。于是,人们就开始研...
分类:
其他好文 时间:
2015-05-22 00:01:39
阅读次数:
182
(正则引擎已完成,Github)我们上一节已经将 NFA 构建出来了,我们的 NFAState 对象的结构实际上是这样的:NFAState { private Set directTable; private Map> transitionMap; private int id;}...
分类:
其他好文 时间:
2015-05-17 12:05:13
阅读次数:
138
语法树如何实现对于之后步骤的繁琐程度有着举足轻重的影响。因为我们已经有了一棵简单优雅的语法树,所以我们的 NFA 很容易就可以构建出来。下面来回顾一下我们拥有的节点种类:分支节点:Concat, Or, Many叶子节点:Closure, Char以下是转换的核心代码: public void...
分类:
其他好文 时间:
2015-05-17 10:41:38
阅读次数:
203
我们上一节已经将 NFA 构建出来了,我们的 NFAState 对象的结构实际上是这样的:NFAState { private Set directTable; private Map> transitionMap; private int id;}其中 transitionMap...
分类:
其他好文 时间:
2015-05-17 10:37:30
阅读次数:
161