code: private CompositeExpression parseMoreExpressions(CompositeExpression expr) {
          if (tokens.positiveLookahead(AND)) {
              tokens.consume();
              expr = expr.and(parseSemVerExpression());
          } else if (tokens.positiveLookahead(OR)) {
              tokens.consume();
              expr = expr.or(parseSemVerExpression());
          }
          return expr;
      }
docs: Parses the {@literal <more-expr>} non-terminal.
  
  <pre>
  {@literal
  <more-expr> ::= <boolean-op> <semver-expr> | epsilon
  }
  </pre>
  
  @param expr the left-hand expression of the logical operators
  @return the expression AST