State start = new State();
State? currentState = start;
for (String keyword in keywords) {
for (int i = 0; i < keyword.length; i++) {
int chr = keyword.codeUnitAt(i);
if (!currentState!.contains(chr)) {
if (i == keyword.length - 1) {
State newState = new State(accept: keyword);
currentState.addTransform(chr, nextState: newState);
currentState = newState;
} else {
State newState = new State();
currentState.addTransform(chr, nextState: newState);
currentState = newState;
}
} else {
currentState = currentState.transformTo(chr);
if (i == keyword.length - 1) {
currentState!.setAccept(keyword);
}
}
}
currentState = start;
}