diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
index 2161097..9aea7da 100644
--- a/.idea/jarRepositories.xml
+++ b/.idea/jarRepositories.xml
@@ -6,6 +6,11 @@
+
+
+
+
+
diff --git a/.idea/misc.xml b/.idea/misc.xml
index e39f481..7c7a8a7 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -7,11 +7,12 @@
+
-
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index aeffa15..0a24609 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -5,10 +5,14 @@
-
+
+
+
-
+
+
+
@@ -16,6 +20,13 @@
+
+
+
-
-
+
+
@@ -82,14 +96,12 @@
-
-
-
+
-
+
@@ -99,14 +111,13 @@
-
+
-
-
+
@@ -116,7 +127,7 @@
-
+
@@ -130,7 +141,7 @@
-
+
@@ -139,7 +150,9 @@
-
+
+
+
@@ -157,11 +170,11 @@
+
+
+
+
-
-
-
-
@@ -269,20 +282,33 @@
-
+
file://$PROJECT_DIR$/src/main/java/ab1/impl/GRUPPE/NFAImpl.java
- 336
-
-
-
-
-
+ 211
+
+
+
+ file://$PROJECT_DIR$/src/main/java/ab1/impl/GRUPPE/NFAImpl.java
+ 343
+
+
+
+ file://$PROJECT_DIR$/src/main/java/ab1/impl/GRUPPE/NFAImpl.java
+ 355
+
+
+
+ file://$PROJECT_DIR$/src/main/java/ab1/impl/GRUPPE/NFAImpl.java
+ 523
+
+
+
diff --git a/src/main/java/ab1/impl/GRUPPE/NFAImpl.java b/src/main/java/ab1/impl/GRUPPE/NFAImpl.java
index 28b0e8a..0f1e34f 100644
--- a/src/main/java/ab1/impl/GRUPPE/NFAImpl.java
+++ b/src/main/java/ab1/impl/GRUPPE/NFAImpl.java
@@ -206,15 +206,11 @@ public class NFAImpl implements NFA {
if (!this.isFinalized || !other.isFinalized()) {
throw new FinalizedStateException();
}
- NFAImpl intersectionNFA = new NFAImpl(this.initialState);
-
- intersectionNFA.states.addAll(this.states);
- intersectionNFA.states.retainAll(other.getStates());
-
- intersectionNFA.transitions.addAll(this.transitions);
- intersectionNFA.transitions.retainAll(other.getTransitions());
-
- return intersectionNFA;
+ NFA newNFA_A = this.complement();
+ NFA newNFA_B = other.complement();
+ NFA unionNFA = newNFA_A.union(newNFA_B);
+ NFA result = unionNFA.complement();
+ return result;
}
@Override
@@ -345,7 +341,7 @@ public class NFAImpl implements NFA {
nfa.addAllTransitions(this.transitions);
nfa.addAllAcceptingStates(this.acceptingStates);
- nfaAddTrap(nfa);
+ nfaAddTrap(nfa); //error on last occasion
NFAImpl fakeNFA = convertNFAtoDFA(nfa);
@@ -524,9 +520,11 @@ public class NFAImpl implements NFA {
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(transition.fromState().equals(state)/*&&transition.readSymbol().equals(letter)*/){
+ if(transition.readSymbol()!= null&&transition.readSymbol()==letter) {
+ hasTransition = true;
+ break;
+ }
}
}
if(!hasTransition){
diff --git a/src/test/java/ab1/tests/myTests.java b/src/test/java/ab1/tests/myTests.java
new file mode 100644
index 0000000..3187091
--- /dev/null
+++ b/src/test/java/ab1/tests/myTests.java
@@ -0,0 +1,63 @@
+package ab1.tests;
+
+import ab1.NFA;
+import ab1.NFAFactory;
+import ab1.NFAProvider;
+import ab1.Transition;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public class myTests {
+ private final NFAFactory factory = NFAProvider.provideFactory();
+
+ @Test
+ public void intersection1Test() {
+ var nfaA = buildCharLanguage('a');
+ var nfaB = buildCharLanguage('b');
+
+ var testInstance = nfaA.intersection(nfaB);
+
+ assertFalse(testInstance.acceptsWord("a"));
+ assertFalse(testInstance.acceptsWord("b"));
+ assertFalse(testInstance.acceptsWord("ab"));
+ assertFalse(testInstance.acceptsWord("ba"));
+ }
+
+
+
+
+
+
+ private NFA buildCharStarLanguage(char c) {
+ var instance = factory.buildNFA("START");
+ instance.addTransition(
+ Transition.builder()
+ .fromState("START")
+ .readSymbol(c)
+ .toState("START")
+ .build()
+ );
+ instance.addAcceptingState("START");
+ instance.finalizeAutomaton();
+
+ return instance;
+ }
+
+ private NFA buildCharLanguage(char c) {
+ var instance = factory.buildNFA("START");
+ instance.addTransition(
+ Transition.builder()
+ .fromState("START")
+ .readSymbol(c)
+ .toState("ACCEPT")
+ .build()
+ );
+ instance.addAcceptingState("ACCEPT");
+ instance.finalizeAutomaton();
+
+ assertTrue(instance.acceptsWord(String.valueOf(c)));
+
+ return instance;
+ }
+}
diff --git a/target/classes/ab1/Transition$TransitionBuilder.class b/target/classes/ab1/Transition$TransitionBuilder.class
index 6a10a5f..8deddb3 100644
Binary files a/target/classes/ab1/Transition$TransitionBuilder.class and b/target/classes/ab1/Transition$TransitionBuilder.class differ
diff --git a/target/classes/ab1/Transition.class b/target/classes/ab1/Transition.class
index d83e6b5..55ad5d1 100644
Binary files a/target/classes/ab1/Transition.class and b/target/classes/ab1/Transition.class differ
diff --git a/target/test-classes/ab1/tests/FinalizeTests.class b/target/test-classes/ab1/tests/FinalizeTests.class
index 1057baf..17e959c 100644
Binary files a/target/test-classes/ab1/tests/FinalizeTests.class and b/target/test-classes/ab1/tests/FinalizeTests.class differ