private Expression parseComparisonExpression() {
    Token token = tokens.lookahead();
    Expression expr;
    switch (token.type) {
      case EQUAL:
        tokens.consume();
        expr = new Equal(parseVersion());
        break;
      case NOT_EQUAL:
        tokens.consume();
        expr = new NotEqual(parseVersion());
        break;
      case GREATER:
        tokens.consume();
        expr = new Greater(parseVersion());
        break;
      case GREATER_EQUAL:
        tokens.consume();
        expr = new GreaterOrEqual(parseVersion());
        break;
      case LESS:
        tokens.consume();
        expr = new Less(parseVersion());
        break;
      case LESS_EQUAL:
        tokens.consume();
        expr = new LessOrEqual(parseVersion());
        break;
      default:
        expr = new Equal(parseVersion());
    }
    return expr;
  }