Beispiel #1
0
  // 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;
  }
Beispiel #2
0
  // 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;
  }
Beispiel #3
0
  // 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;
  }