docs: protected Identifier identifier(Data data, boolean firstCanBeNumber, boolean upper) {
  	Position start = data.srcCode.getPosition();
  	if (!data.srcCode.isCurrentLetter() && !data.srcCode.isCurrentSpecial()) {
  	    if (!firstCanBeNumber) return null;
  	    else if (!data.srcCode.isCurrentBetween('0', '9')) return null;
  	}
  	do {
  	    data.srcCode.next();
  	    if (!(data.srcCode.isCurrentLetter() || data.srcCode.isCurrentBetween('0', '9') || data.srcCode.isCurrentSpecial())) {
  		break;
  	    }
  	}
  	while (data.srcCode.isValidIndex());
  	return Identifier.toIdentifier(data.factory, data.srcCode.substring(start.pos, data.srcCode.getPos() - start.pos),
  		upper && data.settings.dotNotationUpper ? Identifier.CASE_UPPER : Identifier.CASE_ORIGNAL, start, data.srcCode.getPosition());
      }