// Dot two NFA's together private NFA case5(NFA inputNFA1, NFA inputNFA2) { NFA newNFA = new NFA(); // initialize empty NFA // r1 is start for (Transition t : inputNFA1.getTransitions()) { newNFA.addTransistion(t); } int r2newStartNum = Integer.parseInt(inputNFA1.getLastTransistion().substring(1)) + 1; // add r2 transistions for (Transition t : inputNFA2.getTransitions()) { int x = 0; t.increaseBy(r2newStartNum + x); newNFA.addTransistion(t); x++; } // all r1 accept states epsilon transistions to r2 start for (String s : inputNFA1.getAcceptingStates()) { newNFA.addTransistion(new Transition(s, "q" + r2newStartNum, "e")); } int x = 0; // add all r1 states for (String s : inputNFA1.getStates()) { newNFA.addState(s); x++; } // add all r2 states for (String s : inputNFA2.getStates()) { newNFA.addState("q" + (Integer.parseInt(s.substring(1)) + x)); } // create alphabet newNFA.setAlphabet(inputNFA1.getAlphabet()); for (String s : inputNFA2.getAlphabet()) { newNFA.addAlphabet(s); } newNFA.addAlphabet("e"); // add r1 start state newNFA.setStartState("q0"); // add r2 accpet states for (String s : inputNFA2.getAcceptingStates()) { newNFA.addAcceptState("q" + (Integer.parseInt(s.substring(1)) + x)); } return newNFA; }
// Star an NFA private NFA case6(NFA inputNFA1) { NFA newNFA = new NFA(); // initialize empty NFA // add r1 transitions for (Transition t : inputNFA1.getTransitions()) { int x = 0; t.increaseBy(1 + x); newNFA.addTransistion(t); x++; } // add epsilon transitions from accept states to old start state for (String s : inputNFA1.getAcceptingStates()) { newNFA.addTransistion( new Transition( "q" + (Integer.parseInt(s.substring(1)) + 1), "q" + (Integer.parseInt(inputNFA1.getStartState().substring(1)) + 1), "e")); } // add new start state transition newNFA.addTransistion(new Transition("q0", "q1", "e")); newNFA.addState("q0"); // add all r1 states for (String s : inputNFA1.getStates()) { newNFA.addState("q" + (Integer.parseInt(s.substring(1)) + 1)); } // create alphabet newNFA.setAlphabet(inputNFA1.getAlphabet()); newNFA.addAlphabet("e"); // add r1 start state newNFA.setStartState("q0"); newNFA.addAcceptState("q0"); // add r2 accpet states for (String s : inputNFA1.getAcceptingStates()) { newNFA.addAcceptState("q" + (Integer.parseInt(s.substring(1)) + 1)); } return newNFA; }
// Union private NFA case4(NFA inputNFA1, NFA inputNFA2) { NFA newNFA = new NFA(); // initialize empty NFA // New Start State newNFA.setStartState("q0"); // Add all r1 transitions int y = 1; for (Transition t : inputNFA1.getTransitions()) { int x = 0; t.increaseBy(1 + x); newNFA.addTransistion(t); x++; y++; } // Add all r2 transitions int r2newStartNum = Integer.parseInt(inputNFA1.getLastTransistion().substring(1)) + y; for (Transition t : inputNFA2.getTransitions()) { int x = 0; t.increaseBy(r2newStartNum + x); newNFA.addTransistion(t); x++; } // Add e transitions from new start state to old start states newNFA.addTransistion( new Transition( "q0", "q" + (Integer.parseInt(inputNFA1.getStartState().substring(1)) + 1), "e")); newNFA.addTransistion( new Transition( "q0", "q" + (Integer.parseInt(inputNFA2.getStartState().substring(1)) + y + 1), "e")); // add new start state newNFA.addState("q0"); int x = 1; // add all r1 states for (String s : inputNFA1.getStates()) { newNFA.addState("q" + (Integer.parseInt(s.substring(1)) + 1)); x++; } // add all r2 states for (String s : inputNFA2.getStates()) { newNFA.addState("q" + (Integer.parseInt(s.substring(1)) + x)); } // create alphabet newNFA.setAlphabet(inputNFA1.getAlphabet()); for (String s : inputNFA2.getAlphabet()) { newNFA.addAlphabet(s); } newNFA.addAlphabet("e"); // add r1 accpet states for (String s : inputNFA1.getAcceptingStates()) { newNFA.addAcceptState("q" + (Integer.parseInt(s.substring(1)) + 1)); } // add r2 accpet states for (String s : inputNFA2.getAcceptingStates()) { newNFA.addAcceptState("q" + (Integer.parseInt(s.substring(1)) + y + 1)); } return newNFA; }