docs: private AttributeDescr intOrChunkAttribute( AttributeSupportBuilder< ? > as,
                                                  String[] key ) throws RecognitionException {
          AttributeDescrBuilder< ? > attribute = null;
          try {
              StringBuilder builder = new StringBuilder();
              for ( String k : key ) {
                  if ( "-".equals( k ) ) {
                      match( input,
                             DRL5Lexer.MINUS,
                             k,
                             null,
                             DroolsEditorType.KEYWORD ); // part of the keyword
                      if ( state.failed ) return null;
                  } else {
                      match( input,
                             DRL5Lexer.ID,
                             k,
                             null,
                             DroolsEditorType.KEYWORD );
                      if ( state.failed ) return null;
                  }
                  builder.append( k );
              }
              if ( state.backtracking == 0 ) {
                  attribute = helper.start( (DescrBuilder< ? , ? >) as,
                                            AttributeDescrBuilder.class,
                                            builder.toString() );
              }
  
              if ( input.LA( 1 ) == DRL5Lexer.LEFT_PAREN ) {
                  String value = chunk( DRL5Lexer.LEFT_PAREN,
                                        DRL5Lexer.RIGHT_PAREN,
                                        -1 );
                  if ( state.failed ) return null;
                  if ( state.backtracking == 0 ) {
                      attribute.value( safeStripDelimiters( value,
                                                            "(",
                                                            ")" ) );
                      attribute.type( AttributeDescr.Type.EXPRESSION );
                  }
              } else {
                  String value = "";
                  if ( input.LA( 1 ) == DRL5Lexer.PLUS ) {
                      Token sign = match( input,
                                          DRL5Lexer.PLUS,
                                          null,
                                          null,
                                          DroolsEditorType.NUMERIC_CONST );
                      if ( state.failed ) return null;
                      value += sign.getText();
                  } else if ( input.LA( 1 ) == DRL5Lexer.MINUS ) {
                      Token sign = match( input,
                                          DRL5Lexer.MINUS,
                                          null,
                                          null,
                                          DroolsEditorType.NUMERIC_CONST );
                      if ( state.failed ) return null;
                      value += sign.getText();
                  }
                  Token nbr = match( input,
                                     DRL5Lexer.DECIMAL,
                                     null,
                                     null,
                                     DroolsEditorType.NUMERIC_CONST );
                  if ( state.failed ) return null;
                  value += nbr.getText();
                  if ( state.backtracking == 0 ) {
                      attribute.value( value );
                      attribute.type( AttributeDescr.Type.NUMBER );
                  }
              }
          } finally {
              if ( attribute != null ) {
                  helper.end( AttributeDescrBuilder.class,
                              attribute );
              }
          }
          return attribute != null ? attribute.getDescr() : null;
      }