diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 992f8f7..1bf0b51 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -5,15 +5,12 @@ - + - - - - + + + + + + + + @@ -187,10 +158,10 @@ + - @@ -247,7 +218,7 @@ file://$PROJECT_DIR$/src/main/java/ab1/impl/GRUPPE/NFAImpl.java - 347 + 447 diff --git a/src/main/java/ab1/impl/GRUPPE/NFAImpl.java b/src/main/java/ab1/impl/GRUPPE/NFAImpl.java index 03d74d2..f10ad5f 100644 --- a/src/main/java/ab1/impl/GRUPPE/NFAImpl.java +++ b/src/main/java/ab1/impl/GRUPPE/NFAImpl.java @@ -8,6 +8,7 @@ import lombok.Getter; import java.util.*; public class NFAImpl implements NFA { + private Set completeAlphabet; //contains the full Alphabet possible (currently all small letters, can be changed...) private Set states; private Set transitions; @@ -26,6 +27,10 @@ public class NFAImpl implements NFA { this.acceptingStates = new HashSet<>(); this.alphabet = new HashSet<>(); this.isFinalized = false; + this.completeAlphabet = new HashSet<>(); + for(int i='a';i<='z';i++){ + completeAlphabet.add((char)i); + } } @@ -309,6 +314,7 @@ public class NFAImpl implements NFA { nfa.addAllTransitions(this.transitions); nfa.addAllAcceptingStates(this.acceptingStates); + nfaAddTrap(nfa); NFAImpl fakeNFA = convertNFAtoDFA(nfa); // state -> accepting @@ -496,4 +502,25 @@ public class NFAImpl implements NFA { return str; } + private void nfaAddTrap(NFAImpl input){ + String trap = changeIfNecessary("TRAP", input.getStates()); + input.states.add(trap); + Set newTransitions = new HashSet<>(); + for(String state : input.getStates()){ + for(char letter : completeAlphabet){ + boolean hasTransition = false; + for(Transition transition : input.getTransitions()){ + if(transition.fromState().equals(state)&&transition.readSymbol().equals(letter)){ + hasTransition = true; + break; + } + } + if(!hasTransition){ + newTransitions.add(new Transition(state, letter, trap)); + } + } + } + input.addAllTransitions(newTransitions); //input.transitions.addAll(newTransitions); + } + } diff --git a/target/classes/ab1/impl/GRUPPE/NFAImpl.class b/target/classes/ab1/impl/GRUPPE/NFAImpl.class index a9e53a8..d306f69 100644 Binary files a/target/classes/ab1/impl/GRUPPE/NFAImpl.class and b/target/classes/ab1/impl/GRUPPE/NFAImpl.class differ