NFA NFA::createConcatenatingNFA(const NFA &a, const NFA &b) { NFA result; int initialA, finalA, initialB, finalB; result.initializeFromPair(a, b, &initialA, &finalA, &initialB, &finalB); result.addTransition(result.initialState, Epsilon, initialA); result.addTransition(finalA, Epsilon, initialB); result.addTransition(finalB, Epsilon, result.finalState); return result; }
NFA NFA::createAlternatingNFA(const NFA &a, const NFA &b) { NFA result; int newInitialA, newFinalA, newInitialB, newFinalB; result.initializeFromPair(a, b, &newInitialA, &newFinalA, &newInitialB, &newFinalB); result.addTransition(result.initialState, Epsilon, newInitialA); result.addTransition(result.initialState, Epsilon, newInitialB); result.addTransition(newFinalA, Epsilon, result.finalState); result.addTransition(newFinalB, Epsilon, result.finalState); return result; }