code: private NormalVersion parseVersionCore() {
      int major = Integer.parseInt(numericIdentifier());
      consumeNextCharacter(CharType.DOT);
      int minor = Integer.parseInt(numericIdentifier());
      consumeNextCharacter(CharType.DOT);
      int patch = Integer.parseInt(numericIdentifier());
      return new NormalVersion(major, minor, patch);
    }
docs: Parses the {@literal <version core>} non-terminal.
  
  <pre>
  {@literal
  <version core> ::= <major> "." <minor> "." <patch>
  }
  </pre>
  
  @return a valid normal version object