diff --git a/src/main/java/ab1/impl/GRUPPE/NFAImpl.java b/src/main/java/ab1/impl/GRUPPE/NFAImpl.java index 7fb4ff1..126069c 100644 --- a/src/main/java/ab1/impl/GRUPPE/NFAImpl.java +++ b/src/main/java/ab1/impl/GRUPPE/NFAImpl.java @@ -32,7 +32,6 @@ public class NFAImpl implements NFA { return this.transitions; } - @Override public Set getAcceptingStates() { @@ -62,6 +61,26 @@ public class NFAImpl implements NFA { } } + // warum gabs die methode nicht schon vorher? weil i a idiot bin und man die direct adden kann. + /* + public void addAllStates(Set states) throws FinalizedStateException { + if (this.isFinalized) { + throw new FinalizedStateException(); + } else { + this.states.addAll(states); + } + } + + public void addAllTransitions(Set transitions) throws FinalizedStateException { + if (this.isFinalized) { + throw new FinalizedStateException(); + } else { + this.transitions.addAll(transitions); + } + } + */ + + // #TODO @Override public NFA union(NFA other) throws FinalizedStateException { @@ -83,13 +102,54 @@ public class NFAImpl implements NFA { // #TODO @Override public NFA kleeneStar() throws FinalizedStateException { - return null; + if (this.isFinalized) { + throw new FinalizedStateException(); + } + + NFAImpl nfa = new NFAImpl(this.initialState); + + // deep copy but without accepting states + nfa.states.addAll(this.states); + nfa.transitions.addAll(this.transitions); + + for (String acceptingState : this.acceptingStates) { + Transition loopBackTransition = + // creating an epsilon transition (null) for each accepting state + new Transition(acceptingState, null, this.initialState); + nfa.transitions.add(loopBackTransition); + } + + // adding the initial state as accepting state + nfa.acceptingStates.add(this.initialState); + + nfa.finalizeAutomaton(); + + return nfa; } // #TODO @Override public NFA plusOperator() throws FinalizedStateException { - return null; + if (this.isFinalized) { + throw new FinalizedStateException(); + } + + NFAImpl nfa = new NFAImpl(this.initialState); + + // simple deep copy + nfa.states.addAll(this.states); + nfa.transitions.addAll(this.transitions); + nfa.acceptingStates.addAll(this.acceptingStates); + + // for each accepting state + for (String acceptingState : this.acceptingStates) { + Transition loopBackTransition = + // creating an epsilon transition (null) for each accepting state + new Transition(acceptingState, null, this.initialState); + nfa.transitions.add(loopBackTransition); + } + + return nfa; } // #TODO diff --git a/target/classes/ab1/impl/GRUPPE/NFAFactoryImpl.class b/target/classes/ab1/impl/GRUPPE/NFAFactoryImpl.class index 4a7c797..dab8ab8 100644 Binary files a/target/classes/ab1/impl/GRUPPE/NFAFactoryImpl.class and b/target/classes/ab1/impl/GRUPPE/NFAFactoryImpl.class differ diff --git a/target/classes/ab1/impl/GRUPPE/NFAImpl.class b/target/classes/ab1/impl/GRUPPE/NFAImpl.class index 1affa84..6a62af8 100644 Binary files a/target/classes/ab1/impl/GRUPPE/NFAImpl.class and b/target/classes/ab1/impl/GRUPPE/NFAImpl.class differ