code: public void parseValue(String arg) throws ParseException {
          if (isParamValue(arg)) {
              if (nextNamedParam.isPresent()) {
                  final boolean parsed = parseNextNamedParam(arg);
                  nextNamedParam = Opt.absent();
                  if (parsed) {
                      // Parse operation completed successfully.
                      return;
                  }
  
                  // Parse operation completed with a fallback.
                  // 'arg' must then be parsed by the next unbound parameter.
              }
              final CliParam nextUnboundParam = getNextUnboundParam(arg);
              addArg(nextUnboundParam, nextUnboundParam.parse(arg));
          } else {
              // Arg is not a viable param value, it is a call-by-name.
              if (nextNamedParam.isPresent()) {
                  // Notify the current next named param that it isn't going to receive a value.
                  final CliParam param = nextNamedParam.get();
                  addArg(param, param.noValue());
                  nextNamedParam = Opt.absent();
              }
              setNextNamedParam(arg);
          }
      }
docs: Parse the argument.
  The parameter that actually parses the argument depends on the context's state:
  If the previous argument was a call-by-name argument, the parameter specified by that call-by-name will parse
  the argument.
  Otherwise, the next unbound positional parameter will parse this argument.
  
  @param arg Argument to parse.
  @throws ParseException If an error occurred while parsing the argument.