@NotNull
  private static String toDot(@NotNull final ControlFlow flow, @NotNull final ControlFlowProvider provider) {
    StringBuilder builder = new StringBuilder();
    builder.append("digraph {");
    for (Instruction instruction : flow.getInstructions()) {
      printInstruction(builder, instruction, provider);

      if (instruction instanceof ConditionalInstruction conditionalInstruction) {
        builder.append("\n").append("Its ").append(conditionalInstruction.getResult()).
          append(" branch, condition: ").append(conditionalInstruction.getCondition().getText());
      }
      builder.append("\"").append("]");

      builder.append(System.lineSeparator());
      if (instruction.allPred().isEmpty()) {
        builder.append("Entry -> Instruction").append(instruction.num()).append(System.lineSeparator());
      }
      if (instruction.allSucc().isEmpty()) {
        builder.append("Instruction").append(instruction.num()).append(" -> Exit").append(System.lineSeparator());
      }
      for (Instruction succ : instruction.allSucc()) {
        builder.append("Instruction").append(instruction.num()).append(" -> ")
          .append("Instruction").append(succ.num()).append(System.lineSeparator());
      }
    }
    builder.append("}");
    return builder.toString();
  }
@NotNull
  private static String toDot(@NotNull final ControlFlow flow, @NotNull final ControlFlowProvider provider)