GreexAllGenerator.java
package com.navigamez.greex;
import dk.brics.automaton.Automaton;
import dk.brics.automaton.State;
import dk.brics.automaton.Transition;
import java.util.*;
class GreexAllGenerator {
static Set<String> generateAll(Automaton automaton, int maxLength) {
Set<String> strings = new HashSet<String>();
generateAll(automaton.getInitialState(), strings, new ArrayList<Character>(), maxLength);
return strings;
}
private static void generateAll(State state,
Set<String> strings,
List<Character> currentChoices,
int maxLength) {
List<Transition> transitions = state.getSortedTransitions(false);
if (state.isAccept()) {
strings.add(build(currentChoices));
}
if (currentChoices.size() >= maxLength) {
return;
}
for (Transition transition : transitions) {
for (char c = transition.getMin(); c <= transition.getMax(); c++) {
currentChoices.add(c);
generateAll(transition.getDest(), strings, currentChoices, maxLength);
currentChoices.remove(currentChoices.size() - 1);
}
}
}
private static String build(List<Character> characters) {
StringBuilder sb = new StringBuilder(characters.size());
for (Character c : characters) {
sb.append(c);
}
return sb.toString();
}
}