docs: private ExpressionNode readLogicalOR() {
          final List<ExpressionNode> ops = new ArrayList<ExpressionNode>();
          ops.add(readLogicalAND());
  
          while (true) {
              int savepoint = filter.position();
              if (filter.hasSignificantSubSequence(LogicalOperator.OR.getOperatorString())) {
                  ops.add(readLogicalAND());
              } else {
                  filter.setPosition(savepoint);
                  break;
              }
          }
  
          return 1 == ops.size() ? ops.get(0) : LogicalExpressionNode.createLogicalOr(ops);
      }