/** * Changes this nfa to be optional by adding epsilon from first to last. */ public void opt() { first.addEpsilon(last); }
/** * Changes this nfa to be a Kleenes star by adding epsilon moves from first to * last and vice versa. Extra epsilon connected state is added at the end. * This is to prevent future epsilon moves from flowing backwards. E.g (ab*)? */ public void star() { last.addEpsilon(first); first.addEpsilon(last); NFAState<T> s = new NFAState<>(scope); last.addEpsilon(s); last = s; } /**
/** * Concatenates this to nfa by making epsilon move from this last to nfa first. * @param nfa */ public void concat(NFA<T> nfa) { last.addEpsilon(nfa.getFirst()); last = nfa.last; } /**
/** * Creates an empty nfa * @param scope */ public NFA(Scope<NFAState<T>> scope) { this.scope = scope; first = new NFAState<>(scope); last = new NFAState<>(scope); first.addEpsilon(last); } /**
nfa1.last.addEpsilon(last); first.addEpsilon(nfa2.getFirst()); nfa2.getLast().addEpsilon(last); nfa2.last.addEpsilon(last); first.addEpsilon(nfa1.getFirst()); nfa1.getLast().addEpsilon(last); first.addEpsilon(nfa1.getFirst()); first.addEpsilon(nfa2.getFirst()); nfa1.getLast().addEpsilon(last); nfa2.getLast().addEpsilon(last);
s.addEpsilon(result.getLast());