From b1b97fff10c85cc1d368f8304a716300729e71a3 Mon Sep 17 00:00:00 2001 From: Ghost_Element Date: Mon, 8 Jan 2024 23:20:54 +0100 Subject: [PATCH] complement1Test works fuck yea --- .idea/workspace.xml | 75 ++++++------------- src/main/java/ab1/impl/GRUPPE/NFAImpl.java | 27 +++++++ target/classes/ab1/impl/GRUPPE/NFAImpl.class | Bin 12458 -> 13171 bytes 3 files changed, 50 insertions(+), 52 deletions(-) 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 a9e53a8d12e16c3a494c908fbb17c89cd6f306a0..d306f699d7316b038cb246ad5a237d1aa603e509 100644 GIT binary patch literal 13171 zcmX^0Z`VEs1_oQk5-tWN24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk- z5<5l)W)00SP6iGJPId+^9tLg(9!3W7#3V!g%-n(;efOZyfB;v0KQ~9u+=3iN1|E>6 z%*34FlEji!Mg}1tgu%fjMVWc&*6a*?j0}Qc;nI@K9DR?(;*8+b5-tW_24;{of;
^Dsy-NHQ|;B8&=7En#F}PE1K*WDwPW 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 Rfq{#GkujgKkg=FS5&$PH_~rlr literal 12458 zcmX^0Z`VEs1_oQkbS?%a24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk- z5<5l)W)00SP6iGJPId+^9tLg(9!3W7#3V!g%-n(;efOZyfB;v0KQ~9u+=3iN1|E>6 z%*34FlEji!Mg}1tgu%fjMVWc&*6a*?j0}Qc;nI@K9DR?(;*8+b5-tW_24;{of;
^Dsy-NHQ|;B8&=7En#F}PE1K*WDwPW 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 PVqj!UVoYI7V~_*@8+H@#