docs: private void lhsExpression(CEDescrBuilder<?, AndDescr> lhs) throws RecognitionException {
          helper.start(lhs,
                  CEDescrBuilder.class,
                  null);
          if (state.backtracking == 0) {
              helper.emit(Location.LOCATION_LHS_BEGIN_OF_CONDITION);
          }
          try {
              while (input.LA(1) != DRL6Lexer.EOF &&
                      !helper.validateIdentifierKey(DroolsSoftKeywords.THEN) &&
                      !helper.validateIdentifierKey(DroolsSoftKeywords.END)) {
                  if (state.backtracking == 0) {
                      helper.emit(Location.LOCATION_LHS_BEGIN_OF_CONDITION);
                  }
                  lhsOr(lhs,
                          true);
                  if (lhs.getDescr() != null && lhs.getDescr() instanceof ConditionalElementDescr) {
                      ConditionalElementDescr root = (ConditionalElementDescr) lhs.getDescr();
                      BaseDescr[] descrs = root.getDescrs().toArray(new BaseDescr[root.getDescrs().size()]);
                      root.getDescrs().clear();
                      for (int i = 0; i < descrs.length; i++) {
                          root.addOrMerge(descrs[i]);
                      }
                  }
                  if (state.failed)
                      return;
              }
          } finally {
              helper.end(CEDescrBuilder.class,
                      lhs);
          }
      }