public void compressTransitions()
	{
		Hashtable< HashSet<NFAState>,HashSet<CharacterRange> > revMap = new Hashtable< HashSet<NFAState>,HashSet<CharacterRange> >();
		for(CharacterRange cr : transitions.keySet())
		{
			if(!revMap.containsKey(transitions.get(cr))) revMap.put(transitions.get(cr),new HashSet<CharacterRange>());
			revMap.get(transitions.get(cr)).add(cr);
		}
		transitions.clear();
		for(HashSet<NFAState> dest : revMap.keySet())
		{
			for(CharacterRange cr : CharacterRange.consolidateAdjacentRanges(revMap.get(dest)))
			{
				if(!transitions.containsKey(cr)) transitions.put(cr,new HashSet<NFAState>());
				transitions.get(cr).addAll(dest);
			}
		}
	}