From 435cbdf5b4507cca8271d2ed6503d2b37b43dbfc Mon Sep 17 00:00:00 2001 From: xindoo Date: Wed, 26 Aug 2020 15:28:35 +0800 Subject: [PATCH] update --- src/main/java/xyz/xindoo/re/Regex.java | 7 ++++++- src/main/java/xyz/xindoo/re/RegexTest.java | 17 +++++++++-------- src/main/java/xyz/xindoo/re/common/State.java | 11 +++++------ .../java/xyz/xindoo/re/common/StateType.java | 5 +++++ src/main/java/xyz/xindoo/re/dfa/DFAState.java | 8 +++++--- 5 files changed, 30 insertions(+), 18 deletions(-) create mode 100644 src/main/java/xyz/xindoo/re/common/StateType.java diff --git a/src/main/java/xyz/xindoo/re/Regex.java b/src/main/java/xyz/xindoo/re/Regex.java index 3d64118..8124af6 100644 --- a/src/main/java/xyz/xindoo/re/Regex.java +++ b/src/main/java/xyz/xindoo/re/Regex.java @@ -3,6 +3,7 @@ package xyz.xindoo.re; import xyz.xindoo.re.common.Constant; import xyz.xindoo.re.common.Reader; import xyz.xindoo.re.common.State; +import xyz.xindoo.re.common.StateType; import xyz.xindoo.re.dfa.DFAGraph; import xyz.xindoo.re.dfa.DFAState; import xyz.xindoo.re.nfa.NFAGraph; @@ -28,7 +29,7 @@ public class Regex { return null; } NFAGraph nfaGraph = regex2nfa(regex); - nfaGraph.end.setStateType(); + nfaGraph.end.setStateType(StateType.END); // 将NFA的end节点标记为终止态 DFAGraph dfaGraph = convertNfa2Dfa(nfaGraph); return new Regex(nfaGraph, dfaGraph); } @@ -463,4 +464,8 @@ public class Regex { } return -1; } + // todo, 使用hopcraft算法将dfa最小化 + private DFAGraph hopcroft(DFAGraph dfaGraph){ + return new DFAGraph(); + } } diff --git a/src/main/java/xyz/xindoo/re/RegexTest.java b/src/main/java/xyz/xindoo/re/RegexTest.java index b1c8841..fd6b19a 100644 --- a/src/main/java/xyz/xindoo/re/RegexTest.java +++ b/src/main/java/xyz/xindoo/re/RegexTest.java @@ -51,14 +51,15 @@ public class RegexTest { } public static void main(String[] args) { - Options options = new OptionsBuilder().include(RegexTest.class.getSimpleName()).build(); - try { - new Runner(options).run(); - } catch (Exception e) { - System.out.println(e.fillInStackTrace()); - } finally { - System.out.println("finshed"); - } + test(); +// Options options = new OptionsBuilder().include(RegexTest.class.getSimpleName()).build(); +// try { +// new Runner(options).run(); +// } catch (Exception e) { +// System.out.println(e.fillInStackTrace()); +// } finally { +// System.out.println("finshed"); +// } } private static void test() { diff --git a/src/main/java/xyz/xindoo/re/common/State.java b/src/main/java/xyz/xindoo/re/common/State.java index eceba46..d8d8347 100644 --- a/src/main/java/xyz/xindoo/re/common/State.java +++ b/src/main/java/xyz/xindoo/re/common/State.java @@ -1,19 +1,18 @@ package xyz.xindoo.re.common; -import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; -import java.util.List; import java.util.Map; import java.util.Set; public class State { protected static int idCnt = 0; protected int id; - protected int stateType; + protected StateType stateType; public State() { this.id = idCnt++; + this.stateType = StateType.GENERAL; } public Map> next = new HashMap<>(); @@ -27,12 +26,12 @@ public class State { set.add(nfaState); } - public void setStateType() { - stateType = 1; + public void setStateType(StateType stateType) { + this.stateType = stateType; } public boolean isEndState() { - return stateType == 1; + return stateType == StateType.END; } public int getId() { diff --git a/src/main/java/xyz/xindoo/re/common/StateType.java b/src/main/java/xyz/xindoo/re/common/StateType.java new file mode 100644 index 0000000..1dcd9a9 --- /dev/null +++ b/src/main/java/xyz/xindoo/re/common/StateType.java @@ -0,0 +1,5 @@ +package xyz.xindoo.re.common; + +public enum StateType { + GENERAL, END +} diff --git a/src/main/java/xyz/xindoo/re/dfa/DFAState.java b/src/main/java/xyz/xindoo/re/dfa/DFAState.java index 362664e..d462504 100644 --- a/src/main/java/xyz/xindoo/re/dfa/DFAState.java +++ b/src/main/java/xyz/xindoo/re/dfa/DFAState.java @@ -1,6 +1,8 @@ package xyz.xindoo.re.dfa; import xyz.xindoo.re.common.State; +import xyz.xindoo.re.common.StateType; + import java.util.HashSet; import java.util.Set; @@ -9,7 +11,7 @@ public class DFAState extends State { // 保存对应NFAState的id,一个DFAState可能是多个NFAState的集合,所以拼接成String private String allStateIds; public DFAState() { - this.stateType = 2; + this.stateType = StateType.GENERAL; } public DFAState(String allStateIds, Set states) { @@ -17,8 +19,8 @@ public class DFAState extends State { this.nfaStates.addAll(states); for (State state : states) { - if (state.isEndState()) { - this.stateType = 1; + if (state.isEndState()) { // 如果有任意节点是终止态,新建的DFA节点就是终止态 + this.stateType = StateType.END; } } } -- GitLab