diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 0a24609..92aa074 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -4,15 +4,10 @@
-
-
-
-
+
+
-
-
-
@@ -66,7 +61,8 @@
"keyToString": {
"JUnit.ComplexTests.executor": "Run",
"JUnit.ComplexTests.intersection1Test.executor": "Run",
- "JUnit.myTests.intersection1Test.executor": "Debug",
+ "JUnit.ComplexTests.intersection2Test.executor": "Run",
+ "JUnit.myTests.intersection1Test.executor": "Run",
"RunOnceActivity.OpenProjectViewOnStart": "true",
"RunOnceActivity.ShowReadmeOnStart": "true",
"WebServerToolWindowFactoryState": "false",
@@ -254,7 +250,15 @@
1704752420737
-
+
+
+ 1704819635241
+
+
+
+ 1704819635241
+
+
@@ -277,16 +281,12 @@
-
+
+
-
- file://$PROJECT_DIR$/src/main/java/ab1/impl/GRUPPE/NFAImpl.java
- 211
-
-
file://$PROJECT_DIR$/src/main/java/ab1/impl/GRUPPE/NFAImpl.java
343
@@ -297,11 +297,6 @@
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 0f1e34f..8b26e77 100644
--- a/src/main/java/ab1/impl/GRUPPE/NFAImpl.java
+++ b/src/main/java/ab1/impl/GRUPPE/NFAImpl.java
@@ -379,6 +379,135 @@ public class NFAImpl implements NFA {
//transitions={fromState==toState}
//states={A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z}
//obergrenze = anzahl der states (26)
+
+ //how do we get an infinite language?
+ //we need to have a loop, how can we check:
+
+ List path = new ArrayList<>();
+ List transitions= new ArrayList<>(this.getTransitions());
+ //int finished = 0; //0=unfinished, 1=finite, 2 = infinite
+ List letters = new ArrayList<>(this.alphabet); // letters is alphabet with epsilon (null)
+ if(!letters.contains(null)) {
+ letters.add(null);
+ }
+ if(this.alphabet.isEmpty()){
+ return true;
+ }
+ // EndTuple hast firstElement = a
+ path.add(new Tuple('a', this.initialState, true));
+ if(fillToEnd(path, transitions, letters)){
+ return true;
+ }
+
+
+
+
+
+ return continueOnLastTuple(path, transitions, letters);
+ }
+
+ private boolean continueOnLastTuple(List path, List transitions, List letters) {
+ // path is already filled to end -> check next available state for the transition.
+ // case we reached the limit (last state)
+ if(path.size()==1){
+ return false;
+ }
+ String fromState = path.get(path.size()-2).getElement_2();
+ Character readSymbol = path.get(path.size()-1).getElement_1();
+ Transition currentTransition = new Transition(fromState, readSymbol, path.get(path.size()-1).getElement_2());
+ for(int i=transitions.indexOf(currentTransition);i path, List transitions, List letters, Character letter){
+ String fromState = path.get(path.size()-2).getElement_2();
+ for(Transition transition : transitions){
+ if (transition.fromState().equals(fromState) && transition.readSymbol().equals(letter)) {
+ //found new Transition
+ path.remove(path.size()-1);
+ return transition.toState();
+ }
+ }
+ return null;
+ }
+
+
+ /**
+ * call method, if the last Element of path is ok
+ * after method need to
+ * @return true if a valid loop has been found while filling it up
+ */
+ private boolean fillToEnd(List path, List transitions, List letters){
+ String fromState = path.get(path.size()-1).getElement_2();
+ for(Character letter : letters) {
+ for (Transition transition : transitions) {
+ if(transition.fromState().equals(fromState)&&transition.readSymbol().equals(letter)){
+ //found new Transition
+ if(stateInPath(path, transition.toState())) {
+ //loop!
+ //loop reaches a acceptingstate? then return true, else delete some shit
+ } else {
+ path.add(new Tuple(letter, transition.toState()));
+ return fillToEnd(path, transitions, letters);
+ }
+ }
+ }
+ }
+ //from the last State in path there is no further Transition (dead end = job done)
+ return false;
+
+ }
+
+ private boolean stateInPath(List path, String state){
+ for(Tuple tuple : path){
+ if(tuple.getElement_2().equals(state)){
+ return true;
+ }
+ }
return false;
}
diff --git a/src/main/java/ab1/impl/GRUPPE/Tuple.java b/src/main/java/ab1/impl/GRUPPE/Tuple.java
new file mode 100644
index 0000000..c780985
--- /dev/null
+++ b/src/main/java/ab1/impl/GRUPPE/Tuple.java
@@ -0,0 +1,40 @@
+package ab1.impl.GRUPPE;
+
+public class Tuple {
+ private Character element_1;
+
+ public Character getElement_1() {
+ return element_1;
+ }
+
+ public void setElement_1(Character element_1) {
+ this.element_1 = element_1;
+ }
+
+ public String getElement_2() {
+ return element_2;
+ }
+
+ public void setElement_2(String element_2) {
+ this.element_2 = element_2;
+ }
+
+ private String element_2;
+
+ public boolean isEnd() {
+ return isEnd;
+ }
+
+ private boolean isEnd;
+ public Tuple(Character firstElement, String secondElement){
+ this.element_1=firstElement;
+ this.element_2=secondElement;
+ this.isEnd = false;
+ }
+ public Tuple(Character firstElement, String secondElement, boolean isend){
+ this.element_1=firstElement;
+ this.element_2=secondElement;
+ this.isEnd = isend;
+ }
+
+}