code: private static ParseResult parseOption(String val) {
  
      // Get the short name, long name, and description
      String shortName;
      String typeName;
      @NonNull String description;
  
      // Get the short name (if any)
      if (val.startsWith("-")) {
        if (val.length() < 4 || !val.substring(2, 3).equals(" ")) {
          throw new Error(
              "Malformed @Option argument \""
                  + val
                  + "\".  An argument that starts with '-' should contain a short name, a space, and a description.");
        }
        shortName = val.substring(1, 2);
        description = val.substring(3);
      } else {
        shortName = null;
        description = val;
      }
  
      // Get the type name (if any)
      if (description.startsWith("<")) {
        typeName = description.substring(1).replaceFirst(">.*", "");
        description = description.replaceFirst("<.*> ", "");
      } else {
        typeName = null;
      }
  
      // Return the result
      return new ParseResult(shortName, typeName, description);
    }
docs: Parse an option value (the argument to {@code @Option}) and return its three components
  (shortName, typeName, and description). The shortName and typeName are null if they are not
  specified in the string.
  
  @param val the string to parse, which is an argument to {@code @Option}
  @return a description of the option