public void addTransition(int index, Transition e) { if (transitions.isEmpty()) { epsilonOnlyTransitions = e.isEpsilon(); } else if (epsilonOnlyTransitions != e.isEpsilon()) { System.err.format(Locale.getDefault(), "ATN state %d has both epsilon and non-epsilon transitions.\n", stateNumber); epsilonOnlyTransitions = false; } boolean alreadyPresent = false; for (Transition t : transitions) { if ( t.target.stateNumber == e.target.stateNumber ) { if ( t.label()!=null && e.label()!=null && t.label().equals(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.add(index, e); } }
/** * Returns whether the provided sets of ranges are equivalent when any overlaps are flattened. */ public static boolean rangesEqual(List<Range> list1, List<Range> list2) { IntervalSet i1 = intervalsToIntervalSet(rangesToIntervals(list1)); IntervalSet i2 = intervalsToIntervalSet(rangesToIntervals(list2)); return i1.equals(i2); }
public void addTransition(int index, Transition e) { if (transitions.isEmpty()) { epsilonOnlyTransitions = e.isEpsilon(); } else if (epsilonOnlyTransitions != e.isEpsilon()) { System.err.format(Locale.getDefault(), "ATN state %d has both epsilon and non-epsilon transitions.\n", stateNumber); epsilonOnlyTransitions = false; } boolean alreadyPresent = false; for (Transition t : transitions) { if ( t.target.stateNumber == e.target.stateNumber ) { if ( t.label()!=null && e.label()!=null && t.label().equals(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.add(index, e); } }