addTransitionAt method

void addTransitionAt(
  1. int index,
  2. Transition e
)

Implementation

void addTransitionAt(int index, Transition e) {
  if (transitions.isEmpty) {
    epsilonOnlyTransitions = e.isEpsilon;
  } else if (epsilonOnlyTransitions != e.isEpsilon) {
    log('ATN state $stateNumber has both epsilon and non-epsilon transitions.\n',
        level: Level.SEVERE.value);
    epsilonOnlyTransitions = false;
  }

  var alreadyPresent = false;
  for (var t in transitions) {
    if (t.target.stateNumber == e.target.stateNumber) {
      if (t.label != null && e.label != null && t.label == e.label) {
//					System.err.println("Repeated transition upon "+e.label()+" from "+stateNumber+"->"+t.target.stateNumber);
        alreadyPresent = true;
        break;
      } else if (t.isEpsilon && e.isEpsilon) {
//					System.err.println("Repeated epsilon transition from "+stateNumber+"->"+t.target.stateNumber);
        alreadyPresent = true;
        break;
      }
    }
  }
  if (!alreadyPresent) {
    transitions.insert(index, e);
  }
}