docs: private void fromAccumulate(PatternDescrBuilder<?> pattern) throws RecognitionException {
          AccumulateDescrBuilder<?> accumulate = helper.start(pattern,
                  AccumulateDescrBuilder.class,
                  null);
          try {
              if (helper.validateIdentifierKey(DroolsSoftKeywords.ACCUMULATE)) {
                  match(input,
                          DRL6Lexer.ID,
                          DroolsSoftKeywords.ACCUMULATE,
                          null,
                          DroolsEditorType.KEYWORD);
              } else {
                  // might be using the short mnemonic
                  match(input,
                          DRL6Lexer.ID,
                          DroolsSoftKeywords.ACC,
                          null,
                          DroolsEditorType.KEYWORD);
              }
              if (state.failed)
                  return;
  
              if (state.backtracking == 0 && input.LA(1) != DRL6Lexer.EOF) {
                  helper.emit(Location.LOCATION_LHS_FROM_ACCUMULATE);
              }
              match(input,
                      DRL6Lexer.LEFT_PAREN,
                      null,
                      null,
                      DroolsEditorType.SYMBOL);
              if (state.failed)
                  return;
  
              CEDescrBuilder<?, AndDescr> source = accumulate.source();
              try {
                  helper.start(source,
                          CEDescrBuilder.class,
                          null);
                  lhsAnd(source,
                          false);
                  if (state.failed)
                      return;
  
                  if (source.getDescr() != null && source.getDescr() instanceof ConditionalElementDescr) {
                      ConditionalElementDescr root = (ConditionalElementDescr) source.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]);
                      }
                  }
              } finally {
                  helper.end(CEDescrBuilder.class,
                          source);
              }
  
              if (input.LA(1) == DRL6Lexer.COMMA) {
                  match(input,
                          DRL6Lexer.COMMA,
                          null,
                          null,
                          DroolsEditorType.SYMBOL);
                  if (state.failed)
                      return;
              } else if (input.LA(-1) != DRL6Lexer.SEMICOLON) {
                  match(input,
                        DRL6Lexer.SEMICOLON,
                        null,
                        null,
                        DroolsEditorType.SYMBOL);
                  if (state.failed)
                      return;
              }
  
              if (helper.validateIdentifierKey(DroolsSoftKeywords.INIT)) {
                  // custom code, inline accumulate
  
                  // initBlock
                  match(input,
                          DRL6Lexer.ID,
                          DroolsSoftKeywords.INIT,
                          null,
                          DroolsEditorType.KEYWORD);
                  if (state.failed)
                      return;
                  if (state.backtracking == 0 && input.LA(1) != DRL6Lexer.EOF) {
                      helper.emit(Location.LOCATION_LHS_FROM_ACCUMULATE_INIT);
                  }
  
                  String init = chunk(DRL6Lexer.LEFT_PAREN,
                          DRL6Lexer.RIGHT_PAREN,
                          Location.LOCATION_LHS_FROM_ACCUMULATE_INIT_INSIDE);
                  if (state.failed)
                      return;
                  if (state.backtracking == 0)
                      accumulate.init(init);
  
                  if (input.LA(1) == DRL6Lexer.COMMA) {
                      match(input,
                              DRL6Lexer.COMMA,
                              null,
                              null,
                              DroolsEditorType.SYMBOL);
                      if (state.failed)
                          return;
                  }
  
                  // actionBlock
                  match(input,
                          DRL6Lexer.ID,
                          DroolsSoftKeywords.ACTION,
                          null,
                          DroolsEditorType.KEYWORD);
                  if (state.failed)
                      return;
                  if (state.backtracking == 0 && input.LA(1) != DRL6Lexer.EOF) {
                      helper.emit(Location.LOCATION_LHS_FROM_ACCUMULATE_ACTION);
                  }
  
                  String action = chunk(DRL6Lexer.LEFT_PAREN,
                          DRL6Lexer.RIGHT_PAREN,
                          Location.LOCATION_LHS_FROM_ACCUMULATE_ACTION_INSIDE);
                  if (state.failed)
                      return;
                  if (state.backtracking == 0)
                      accumulate.action(action);
  
                  if (input.LA(1) == DRL6Lexer.COMMA) {
                      match(input,
                              DRL6Lexer.COMMA,
                              null,
                              null,
                              DroolsEditorType.SYMBOL);
                      if (state.failed)
                          return;
                  }
  
                  // reverseBlock
                  if (helper.validateIdentifierKey(DroolsSoftKeywords.REVERSE)) {
                      match(input,
                              DRL6Lexer.ID,
                              DroolsSoftKeywords.REVERSE,
                              null,
                              DroolsEditorType.KEYWORD);
                      if (state.failed)
                          return;
                      if (state.backtracking == 0 && input.LA(1) != DRL6Lexer.EOF) {
                          helper.emit(Location.LOCATION_LHS_FROM_ACCUMULATE_REVERSE);
                      }
  
                      String reverse = chunk(DRL6Lexer.LEFT_PAREN,
                              DRL6Lexer.RIGHT_PAREN,
                              Location.LOCATION_LHS_FROM_ACCUMULATE_REVERSE_INSIDE);
                      if (state.failed)
                          return;
                      if (state.backtracking == 0)
                          accumulate.reverse(reverse);
  
                      if (input.LA(1) == DRL6Lexer.COMMA) {
                          match(input,
                                  DRL6Lexer.COMMA,
                                  null,
                                  null,
                                  DroolsEditorType.SYMBOL);
                          if (state.failed)
                              return;
                      }
                  }
  
                  // resultBlock
                  match(input,
                          DRL6Lexer.ID,
                          DroolsSoftKeywords.RESULT,
                          null,
                          DroolsEditorType.KEYWORD);
                  if (state.failed)
                      return;
  
                  if (state.backtracking == 0 && input.LA(1) != DRL6Lexer.EOF) {
                      helper.emit(Location.LOCATION_LHS_FROM_ACCUMULATE_RESULT);
                  }
  
                  String result = chunk(DRL6Lexer.LEFT_PAREN,
                          DRL6Lexer.RIGHT_PAREN,
                          Location.LOCATION_LHS_FROM_ACCUMULATE_RESULT_INSIDE);
                  if (state.failed)
                      return;
                  if (state.backtracking == 0)
                      accumulate.result(result);
              } else {
                  // accumulate functions
                  accumulateFunction(accumulate,
                                     false,
                                     null);
                  if (state.failed)
                      return;
              }
  
              match(input,
                      DRL6Lexer.RIGHT_PAREN,
                      null,
                      null,
                      DroolsEditorType.SYMBOL);
              if (state.failed)
                  return;
          } finally {
              helper.end(AccumulateDescrBuilder.class,
                      accumulate);
              if (state.backtracking == 0 && input.LA(1) != DRL6Lexer.EOF) {
                  helper.emit(Location.LOCATION_LHS_BEGIN_OF_CONDITION);
              }
          }
      }