private static void Draw(RegexState regexState, StringBuilder sb, HashSet<string> set) { if (set.Contains(regexState.ToString())) { return; } set.Add(regexState.ToString()); if (!regexState.IsFinalStates) { sb.Append($" {regexState} [shape=\"circle\"];\n"); } foreach (var transition in regexState.Transitions) { sb.Append($" {regexState} -> {transition.Value}[label=\"{transition.Key}\"];\n"); Draw(transition.Value, sb, set); } foreach (var state in regexState.Epsilon) { sb.Append($" {regexState} -> {state}[label=\"ε\"];\n"); Draw(state, sb, set); } }