docs: public final JavaParser.statement_return statement() throws RecognitionException {
  		JavaParser.statement_return retval = new JavaParser.statement_return();
  		retval.start = input.LT(1);
  		int statement_StartIndex = input.index();
  
  		try {
  			if ( state.backtracking>0 && alreadyParsedRule(input, 83) ) { return retval; }
  
  			// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:727:5: ( block | 'assert' expression ( ':' expression )? ';' | ifStatement | forStatement | whileStatement | 'do' statement 'while' parExpression ';' | tryStatement | 'switch' parExpression '{' switchBlockStatementGroups '}' | 'synchronized' parExpression block | 'return' ( expression )? ';' | throwStatement | 'break' ( Identifier )? ';' | 'continue' ( Identifier )? ';' | modifyStatement | updateStatement | retractStatement | deleteStatement | insertStatement | ';' | statementExpression ';' | Identifier ':' statement )
  			int alt111=21;
  			alt111 = dfa111.predict(input);
  			switch (alt111) {
  				case 1 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:727:7: block
  					{
  					pushFollow(FOLLOW_block_in_statement2923);
  					block();
  					state._fsp--;
  					if (state.failed) return retval;
  					}
  					break;
  				case 2 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:728:7: 'assert' expression ( ':' expression )? ';'
  					{
  					match(input,64,FOLLOW_64_in_statement2931); if (state.failed) return retval;
  					pushFollow(FOLLOW_expression_in_statement2933);
  					expression();
  					state._fsp--;
  					if (state.failed) return retval;
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:728:27: ( ':' expression )?
  					int alt107=2;
  					int LA107_0 = input.LA(1);
  					if ( (LA107_0==51) ) {
  						alt107=1;
  					}
  					switch (alt107) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:728:28: ':' expression
  							{
  							match(input,51,FOLLOW_51_in_statement2936); if (state.failed) return retval;
  							pushFollow(FOLLOW_expression_in_statement2938);
  							expression();
  							state._fsp--;
  							if (state.failed) return retval;
  							}
  							break;
  
  					}
  
  					match(input,52,FOLLOW_52_in_statement2942); if (state.failed) return retval;
  					}
  					break;
  				case 3 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:729:7: ifStatement
  					{
  					pushFollow(FOLLOW_ifStatement_in_statement2950);
  					ifStatement();
  					state._fsp--;
  					if (state.failed) return retval;
  					}
  					break;
  				case 4 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:730:7: forStatement
  					{
  					pushFollow(FOLLOW_forStatement_in_statement2958);
  					forStatement();
  					state._fsp--;
  					if (state.failed) return retval;
  					}
  					break;
  				case 5 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:731:7: whileStatement
  					{
  					pushFollow(FOLLOW_whileStatement_in_statement2967);
  					whileStatement();
  					state._fsp--;
  					if (state.failed) return retval;
  					}
  					break;
  				case 6 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:732:7: 'do' statement 'while' parExpression ';'
  					{
  					match(input,76,FOLLOW_76_in_statement2975); if (state.failed) return retval;
  					pushFollow(FOLLOW_statement_in_statement2977);
  					statement();
  					state._fsp--;
  					if (state.failed) return retval;
  					match(input,120,FOLLOW_120_in_statement2979); if (state.failed) return retval;
  					pushFollow(FOLLOW_parExpression_in_statement2981);
  					parExpression();
  					state._fsp--;
  					if (state.failed) return retval;
  					match(input,52,FOLLOW_52_in_statement2983); if (state.failed) return retval;
  					}
  					break;
  				case 7 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:734:7: tryStatement
  					{
  					pushFollow(FOLLOW_tryStatement_in_statement2996);
  					tryStatement();
  					state._fsp--;
  					if (state.failed) return retval;
  					}
  					break;
  				case 8 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:736:7: 'switch' parExpression '{' switchBlockStatementGroups '}'
  					{
  					match(input,109,FOLLOW_109_in_statement3011); if (state.failed) return retval;
  					pushFollow(FOLLOW_parExpression_in_statement3013);
  					parExpression();
  					state._fsp--;
  					if (state.failed) return retval;
  					match(input,121,FOLLOW_121_in_statement3015); if (state.failed) return retval;
  					pushFollow(FOLLOW_switchBlockStatementGroups_in_statement3017);
  					switchBlockStatementGroups();
  					state._fsp--;
  					if (state.failed) return retval;
  					match(input,125,FOLLOW_125_in_statement3019); if (state.failed) return retval;
  					}
  					break;
  				case 9 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:737:7: 'synchronized' parExpression block
  					{
  					match(input,110,FOLLOW_110_in_statement3027); if (state.failed) return retval;
  					pushFollow(FOLLOW_parExpression_in_statement3029);
  					parExpression();
  					state._fsp--;
  					if (state.failed) return retval;
  					pushFollow(FOLLOW_block_in_statement3031);
  					block();
  					state._fsp--;
  					if (state.failed) return retval;
  					}
  					break;
  				case 10 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:738:7: 'return' ( expression )? ';'
  					{
  					match(input,104,FOLLOW_104_in_statement3039); if (state.failed) return retval;
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:738:16: ( expression )?
  					int alt108=2;
  					int LA108_0 = input.LA(1);
  					if ( ((LA108_0 >= CharacterLiteral && LA108_0 <= DecimalLiteral)||LA108_0==FloatingPointLiteral||(LA108_0 >= HexLiteral && LA108_0 <= Identifier)||(LA108_0 >= OctalLiteral && LA108_0 <= StringLiteral)||LA108_0==29||LA108_0==36||(LA108_0 >= 40 && LA108_0 <= 41)||(LA108_0 >= 44 && LA108_0 <= 45)||LA108_0==53||LA108_0==65||LA108_0==67||(LA108_0 >= 70 && LA108_0 <= 71)||LA108_0==77||(LA108_0 >= 79 && LA108_0 <= 80)||LA108_0==82||LA108_0==85||LA108_0==92||LA108_0==94||(LA108_0 >= 97 && LA108_0 <= 98)||LA108_0==105||LA108_0==108||LA108_0==111||LA108_0==115||LA108_0==118||LA108_0==126) ) {
  						alt108=1;
  					}
  					switch (alt108) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:738:16: expression
  							{
  							pushFollow(FOLLOW_expression_in_statement3041);
  							expression();
  							state._fsp--;
  							if (state.failed) return retval;
  							}
  							break;
  
  					}
  
  					match(input,52,FOLLOW_52_in_statement3044); if (state.failed) return retval;
  					}
  					break;
  				case 11 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:739:8: throwStatement
  					{
  					pushFollow(FOLLOW_throwStatement_in_statement3053);
  					throwStatement();
  					state._fsp--;
  					if (state.failed) return retval;
  					}
  					break;
  				case 12 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:740:7: 'break' ( Identifier )? ';'
  					{
  					match(input,66,FOLLOW_66_in_statement3061); if (state.failed) return retval;
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:740:15: ( Identifier )?
  					int alt109=2;
  					int LA109_0 = input.LA(1);
  					if ( (LA109_0==Identifier) ) {
  						alt109=1;
  					}
  					switch (alt109) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:740:15: Identifier
  							{
  							match(input,Identifier,FOLLOW_Identifier_in_statement3063); if (state.failed) return retval;
  							}
  							break;
  
  					}
  
  					match(input,52,FOLLOW_52_in_statement3066); if (state.failed) return retval;
  					}
  					break;
  				case 13 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:741:7: 'continue' ( Identifier )? ';'
  					{
  					match(input,73,FOLLOW_73_in_statement3074); if (state.failed) return retval;
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:741:18: ( Identifier )?
  					int alt110=2;
  					int LA110_0 = input.LA(1);
  					if ( (LA110_0==Identifier) ) {
  						alt110=1;
  					}
  					switch (alt110) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:741:18: Identifier
  							{
  							match(input,Identifier,FOLLOW_Identifier_in_statement3076); if (state.failed) return retval;
  							}
  							break;
  
  					}
  
  					match(input,52,FOLLOW_52_in_statement3079); if (state.failed) return retval;
  					}
  					break;
  				case 14 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:743:7: modifyStatement
  					{
  					pushFollow(FOLLOW_modifyStatement_in_statement3092);
  					modifyStatement();
  					state._fsp--;
  					if (state.failed) return retval;
  					}
  					break;
  				case 15 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:743:25: updateStatement
  					{
  					pushFollow(FOLLOW_updateStatement_in_statement3096);
  					updateStatement();
  					state._fsp--;
  					if (state.failed) return retval;
  					}
  					break;
  				case 16 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:743:43: retractStatement
  					{
  					pushFollow(FOLLOW_retractStatement_in_statement3100);
  					retractStatement();
  					state._fsp--;
  					if (state.failed) return retval;
  					}
  					break;
  				case 17 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:743:62: deleteStatement
  					{
  					pushFollow(FOLLOW_deleteStatement_in_statement3104);
  					deleteStatement();
  					state._fsp--;
  					if (state.failed) return retval;
  					}
  					break;
  				case 18 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:743:80: insertStatement
  					{
  					pushFollow(FOLLOW_insertStatement_in_statement3108);
  					insertStatement();
  					state._fsp--;
  					if (state.failed) return retval;
  					}
  					break;
  				case 19 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:744:7: ';'
  					{
  					match(input,52,FOLLOW_52_in_statement3116); if (state.failed) return retval;
  					}
  					break;
  				case 20 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:745:7: statementExpression ';'
  					{
  					pushFollow(FOLLOW_statementExpression_in_statement3124);
  					statementExpression();
  					state._fsp--;
  					if (state.failed) return retval;
  					match(input,52,FOLLOW_52_in_statement3126); if (state.failed) return retval;
  					}
  					break;
  				case 21 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:746:7: Identifier ':' statement
  					{
  					match(input,Identifier,FOLLOW_Identifier_in_statement3134); if (state.failed) return retval;
  					match(input,51,FOLLOW_51_in_statement3136); if (state.failed) return retval;
  					pushFollow(FOLLOW_statement_in_statement3138);
  					statement();
  					state._fsp--;
  					if (state.failed) return retval;
  					}
  					break;
  
  			}
  			retval.stop = input.LT(-1);
  
  		}
  		catch (RecognitionException re) {
  			reportError(re);
  			recover(input,re);
  		}
  		finally {
  			// do for sure before leaving
  			if ( state.backtracking>0 ) { memoize(input, 83, statement_StartIndex); }
  
  		}
  		return retval;
  	}