资源简介
JAVA实现的正则表达式转换成DFA,并将DFA用Graph画出,画图须安装Graph。
代码片段和文件信息
import java.io.File;
import java.util.*;
import java.util.concurrent.linkedBlockingQueue;
public class DFA {
char[][] g;
int size;
int sta;
ArrayList ends;//终态节点
char Njump;
Set M;
Map setMap;
Set setSet;
ArrayList edges;
public DFA(NFA nfa) {
g = nfa.getG();
size = nfa.getSize();
sta = nfa.getSta();
Njump = nfa.getNjump();
M = new HashSet();
ArrayList nedges = nfa.getEdges();
for (Edge edge : nedges) {
char x = edge.getStr();
if (x != Njump)
M.add(x);
}
setSet = new HashSet();
setMap = new HashMap();
setEdges();
setEnds(nfa.getEnd());
}
public void outSet() {
for (object x : setSet) {
for (object i : (Set) x) {
System.out.print((int) i + “ “);
}
System.out.println(“/“ + setMap.get(x));
}
}
//x-m-set //move(x,m)
private Set move(Set x char m) {
Set set = new HashSet();
for (object i : x) {
for (int j = 0; j < size; j++) {
if (g[(int) i][j] == m) {
set.add(j);
}
}
}
return set;
}
//ε-closure{x}->set
private Set getClosure(Set x) {
Set set = new HashSet(x);
boolean k = true;
while (k) {
x = new HashSet(set);
k = false;
for (int i : x) {
set.add(i);
for (int j = 0; j < size; j++) {
if (g[i][j] == Njump) {
if (set.add(j))
k = true;
}
}
}
}
return set;
}
private Set getClosure(int x) {
Set set = new HashSet();
set.add(x);
return getClosure(set);
}
private void setEdges() {
edges = new ArrayList<>();
linkedBlockingQueue setQueue = new linkedBlockingQueue<>();
Set set = getClosure(sta);
Integer setN = 0;
if (setSet.add(set)) {
setQueue.add(set);
setN++;
setMap.put(set setN);//setMap 状态集的集合
}
while (!setQueue.isEmpty()) {
Set x = (Set) setQueue.poll();
for (object m : M) {
Set nx = getClosure(move(x (char) m));
if ((!nx.isEmpty()) && setSet.add(nx)) {//新增状态集
setQueue.add(nx);
setN++;//状态集个数
setMap.put(nx setN);
}
if (!nx.isEmpty()) {
//edges 状态集间跳转的边集
edges.add(new Edge(setMap.get(x) setMap.get(nx) (char) m));
}
}
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 0 2018-04-23 13:07 婧愪唬鐮?
文件 4044 2018-01-07 21:03 婧愪唬鐮?DFA.java
文件 2477 2018-01-07 19:45 婧愪唬鐮?Regex.java
文件 4288 2018-01-07 20:35 婧愪唬鐮?NFA.java
目录 0 2018-04-23 13:07 婧愪唬鐮?Graphoutput\
文件 9642 2017-11-13 12:44 婧愪唬鐮?Graphoutput\GraphViz.java
文件 417 2017-11-13 15:58 婧愪唬鐮?G.java
文件 363 2018-01-07 21:31 婧愪唬鐮?Main.java
文件 2176 2017-11-13 12:45 婧愪唬鐮?Proba.java
文件 931 2017-11-13 19:03 婧愪唬鐮?Edge.java
- 上一篇:协同过滤推荐系统 Java
- 下一篇:Android 在线播放器代码
相关资源
- 简体繁体转换jar包
- java android 繁简体互转jar包
- Java字节码转换工具—Retrotranslato
- 利用七参数进行CGCS2000坐标系到西安
- 精通正则表达式_第三版高清版.
- java汇率转换小应用程序有美元
- list map转换成json格式以及相关jar包(
- .proto 各种语言转换
- 华为CDR话单二进制文件转换成对应的
- MP3转换为PCM文件,转换为WAV文件
- aspose.words.15-8-0.jar
- 使用Java开发的OCR程序 根据图像识别转
- JSON转换所需的各种jar包
- android 把一个view视图转换成bitmap 保存
- doc文档转PDF文档所需的jar包
- jar2 jar转换成exe工具
- java代码实现word转换成pdf
- 最新POI Lib Java Excel转换成Txt
- keystore转换成pem和pk8工具apltoolsignjar
- pdf转换成为图片需要的两个jar
-
Testli
nk用例转换工具最新版本 - 编程语言转换器!!!编程语言转换
- kabeja0.4将CAD格式文件转换,内附demo
- dbf转换成xls
- aspose.words for java文档转换工具类
- java地址转换经纬度
- java实现wordpptexcel等转换
- java 对象与json字符串互相转换工具类
- protocbuf转换工具
- java 图片转换成视频avimovrawflv...
评论
共有 条评论