code: private CompositeExpression parsePartialVersionRange() {
          int major = intOf(consumeNextToken(NUMERIC).lexeme);
          if (!tokens.positiveLookahead(DOT)) {
              return gte(versionFor(major)).and(lt(versionFor(major + 1)));
          }
          consumeNextToken(DOT);
          int minor = intOf(consumeNextToken(NUMERIC).lexeme);
          return gte(versionFor(major, minor)).and(lt(versionFor(major, minor + 1)));
      }
docs: Parses the {@literal <partial-version-range>} non-terminal.
  
  <pre>
  {@literal
  <partial-version-range> ::= <major> | <major> "." <minor>
  }
  </pre>
  
  @return the expression AST