docs: public final DSLMapParser.pattern_return pattern() throws RecognitionException {
  		DSLMapParser.pattern_return retval = new DSLMapParser.pattern_return();
  		retval.start = input.LT(1);
  
  		Object root_0 = null;
  
  		Token DOT28=null;
  		Token MISC29=null;
  		Token LEFT_CURLY30=null;
  		Token RIGHT_CURLY32=null;
  		Token LEFT_SQUARE33=null;
  		Token RIGHT_SQUARE35=null;
  		ParserRuleReturnScope literal27 =null;
  		ParserRuleReturnScope literal31 =null;
  		ParserRuleReturnScope pattern34 =null;
  
  		Object DOT28_tree=null;
  		Object MISC29_tree=null;
  		Object LEFT_CURLY30_tree=null;
  		Object RIGHT_CURLY32_tree=null;
  		Object LEFT_SQUARE33_tree=null;
  		Object RIGHT_SQUARE35_tree=null;
  
  		try {
  			// src/main/resources/org/drools/compiler/lang/dsl/DSLMap.g:220:9: ( ( literal | DOT | MISC | LEFT_CURLY literal RIGHT_CURLY | LEFT_SQUARE pattern RIGHT_SQUARE )+ )
  			// src/main/resources/org/drools/compiler/lang/dsl/DSLMap.g:220:11: ( literal | DOT | MISC | LEFT_CURLY literal RIGHT_CURLY | LEFT_SQUARE pattern RIGHT_SQUARE )+
  			{
  			root_0 = (Object)adaptor.nil();
  
  
  			// src/main/resources/org/drools/compiler/lang/dsl/DSLMap.g:220:11: ( literal | DOT | MISC | LEFT_CURLY literal RIGHT_CURLY | LEFT_SQUARE pattern RIGHT_SQUARE )+
  			int cnt16=0;
  			loop16:
  			while (true) {
  				int alt16=6;
  				switch ( input.LA(1) ) {
  				case RIGHT_SQUARE:
  					{
  					int LA16_2 = input.LA(2);
  					if ( (synpred24_DSLMap()) ) {
  						alt16=1;
  					}
  
  					}
  					break;
  				case LEFT_SQUARE:
  					{
  					int LA16_3 = input.LA(2);
  					if ( (synpred24_DSLMap()) ) {
  						alt16=1;
  					}
  					else if ( (synpred28_DSLMap()) ) {
  						alt16=5;
  					}
  
  					}
  					break;
  				case DOT:
  					{
  					alt16=2;
  					}
  					break;
  				case MISC:
  					{
  					alt16=3;
  					}
  					break;
  				case LEFT_CURLY:
  					{
  					alt16=4;
  					}
  					break;
  				case COLON:
  				case LITERAL:
  					{
  					alt16=1;
  					}
  					break;
  				}
  				switch (alt16) {
  				case 1 :
  					// src/main/resources/org/drools/compiler/lang/dsl/DSLMap.g:220:13: literal
  					{
  					pushFollow(FOLLOW_literal_in_pattern1290);
  					literal27=literal();
  					state._fsp--;
  					if (state.failed) return retval;
  					if ( state.backtracking==0 ) adaptor.addChild(root_0, literal27.getTree());
  
  					}
  					break;
  				case 2 :
  					// src/main/resources/org/drools/compiler/lang/dsl/DSLMap.g:221:13: DOT
  					{
  					DOT28=(Token)match(input,DOT,FOLLOW_DOT_in_pattern1304); if (state.failed) return retval;
  					if ( state.backtracking==0 ) {
  					DOT28_tree = (Object)adaptor.create(DOT28);
  					adaptor.addChild(root_0, DOT28_tree);
  					}
  
  					}
  					break;
  				case 3 :
  					// src/main/resources/org/drools/compiler/lang/dsl/DSLMap.g:222:13: MISC
  					{
  					MISC29=(Token)match(input,MISC,FOLLOW_MISC_in_pattern1318); if (state.failed) return retval;
  					if ( state.backtracking==0 ) {
  					MISC29_tree = (Object)adaptor.create(MISC29);
  					adaptor.addChild(root_0, MISC29_tree);
  					}
  
  					}
  					break;
  				case 4 :
  					// src/main/resources/org/drools/compiler/lang/dsl/DSLMap.g:223:13: LEFT_CURLY literal RIGHT_CURLY
  					{
  					LEFT_CURLY30=(Token)match(input,LEFT_CURLY,FOLLOW_LEFT_CURLY_in_pattern1332); if (state.failed) return retval;
  					if ( state.backtracking==0 ) {
  					LEFT_CURLY30_tree = (Object)adaptor.create(LEFT_CURLY30);
  					adaptor.addChild(root_0, LEFT_CURLY30_tree);
  					}
  
  					pushFollow(FOLLOW_literal_in_pattern1334);
  					literal31=literal();
  					state._fsp--;
  					if (state.failed) return retval;
  					if ( state.backtracking==0 ) adaptor.addChild(root_0, literal31.getTree());
  
  					RIGHT_CURLY32=(Token)match(input,RIGHT_CURLY,FOLLOW_RIGHT_CURLY_in_pattern1336); if (state.failed) return retval;
  					if ( state.backtracking==0 ) {
  					RIGHT_CURLY32_tree = (Object)adaptor.create(RIGHT_CURLY32);
  					adaptor.addChild(root_0, RIGHT_CURLY32_tree);
  					}
  
  					}
  					break;
  				case 5 :
  					// src/main/resources/org/drools/compiler/lang/dsl/DSLMap.g:224:13: LEFT_SQUARE pattern RIGHT_SQUARE
  					{
  					LEFT_SQUARE33=(Token)match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_pattern1350); if (state.failed) return retval;
  					if ( state.backtracking==0 ) {
  					LEFT_SQUARE33_tree = (Object)adaptor.create(LEFT_SQUARE33);
  					adaptor.addChild(root_0, LEFT_SQUARE33_tree);
  					}
  
  					pushFollow(FOLLOW_pattern_in_pattern1352);
  					pattern34=pattern();
  					state._fsp--;
  					if (state.failed) return retval;
  					if ( state.backtracking==0 ) adaptor.addChild(root_0, pattern34.getTree());
  
  					RIGHT_SQUARE35=(Token)match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_pattern1354); if (state.failed) return retval;
  					if ( state.backtracking==0 ) {
  					RIGHT_SQUARE35_tree = (Object)adaptor.create(RIGHT_SQUARE35);
  					adaptor.addChild(root_0, RIGHT_SQUARE35_tree);
  					}
  
  					}
  					break;
  
  				default :
  					if ( cnt16 >= 1 ) break loop16;
  					if (state.backtracking>0) {state.failed=true; return retval;}
  					EarlyExitException eee = new EarlyExitException(16, input);
  					throw eee;
  				}
  				cnt16++;
  			}
  
  			}
  
  			retval.stop = input.LT(-1);
  
  			if ( state.backtracking==0 ) {
  			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
  			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
  			}
  		}
  		catch (RecognitionException re) {
  			reportError(re);
  			recover(input,re);
  			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
  		}
  		finally {
  			// do for sure before leaving
  		}
  		return retval;
  	}