code: private MetadataVersion parsePreRelease() {
      ensureValidLookahead(CharType.DIGIT, CharType.LETTER, CharType.HYPHEN);
      List<String> idents = new ArrayList<String>();
      do {
        idents.add(preReleaseIdentifier());
        if (chars.positiveLookahead(CharType.DOT)) {
          consumeNextCharacter(CharType.DOT);
          continue;
        }
        break;
      } while (true);
      return new MetadataVersion(idents.toArray(new String[idents.size()]));
    }
docs: Parses the {@literal <pre-release>} non-terminal.
  
  <pre>
  {@literal
  <pre-release> ::= <dot-separated pre-release identifiers>
  
  <dot-separated pre-release identifiers> ::= <pre-release identifier>
  | <pre-release identifier> "." <dot-separated pre-release identifiers>
  }
  </pre>
  
  @return a valid pre-release version object