docs: public final void forControl() throws RecognitionException {
  		VarDecl_stack.push(new VarDecl_scope());
  
  		int forControl_StartIndex = input.index();
  
  
  		            increaseLevel();
  		            VarDecl_stack.peek().descr = new JavaLocalDeclarationDescr();
  		        
  		try {
  			if ( state.backtracking>0 && alreadyParsedRule(input, 100) ) { return; }
  
  			// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1051:5: ( forVarControl | ( forInit )? ';' ( expression )? ';' ( forUpdate )? )
  			int alt135=2;
  			alt135 = dfa135.predict(input);
  			switch (alt135) {
  				case 1 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1051:7: forVarControl
  					{
  					pushFollow(FOLLOW_forVarControl_in_forControl4558);
  					forVarControl();
  					state._fsp--;
  					if (state.failed) return;
  					}
  					break;
  				case 2 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1052:7: ( forInit )? ';' ( expression )? ';' ( forUpdate )?
  					{
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1052:7: ( forInit )?
  					int alt132=2;
  					int LA132_0 = input.LA(1);
  					if ( ((LA132_0 >= CharacterLiteral && LA132_0 <= DecimalLiteral)||LA132_0==FloatingPointLiteral||(LA132_0 >= HexLiteral && LA132_0 <= Identifier)||(LA132_0 >= OctalLiteral && LA132_0 <= StringLiteral)||LA132_0==29||LA132_0==36||(LA132_0 >= 40 && LA132_0 <= 41)||(LA132_0 >= 44 && LA132_0 <= 45)||LA132_0==53||LA132_0==58||LA132_0==65||LA132_0==67||(LA132_0 >= 70 && LA132_0 <= 71)||LA132_0==77||(LA132_0 >= 79 && LA132_0 <= 80)||(LA132_0 >= 82 && LA132_0 <= 83)||LA132_0==85||LA132_0==92||LA132_0==94||(LA132_0 >= 97 && LA132_0 <= 98)||LA132_0==105||LA132_0==108||LA132_0==111||LA132_0==115||LA132_0==118||LA132_0==126) ) {
  						alt132=1;
  					}
  					switch (alt132) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1052:7: forInit
  							{
  							pushFollow(FOLLOW_forInit_in_forControl4566);
  							forInit();
  							state._fsp--;
  							if (state.failed) return;
  							}
  							break;
  
  					}
  
  					match(input,52,FOLLOW_52_in_forControl4569); if (state.failed) return;
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1052:20: ( expression )?
  					int alt133=2;
  					int LA133_0 = input.LA(1);
  					if ( ((LA133_0 >= CharacterLiteral && LA133_0 <= DecimalLiteral)||LA133_0==FloatingPointLiteral||(LA133_0 >= HexLiteral && LA133_0 <= Identifier)||(LA133_0 >= OctalLiteral && LA133_0 <= StringLiteral)||LA133_0==29||LA133_0==36||(LA133_0 >= 40 && LA133_0 <= 41)||(LA133_0 >= 44 && LA133_0 <= 45)||LA133_0==53||LA133_0==65||LA133_0==67||(LA133_0 >= 70 && LA133_0 <= 71)||LA133_0==77||(LA133_0 >= 79 && LA133_0 <= 80)||LA133_0==82||LA133_0==85||LA133_0==92||LA133_0==94||(LA133_0 >= 97 && LA133_0 <= 98)||LA133_0==105||LA133_0==108||LA133_0==111||LA133_0==115||LA133_0==118||LA133_0==126) ) {
  						alt133=1;
  					}
  					switch (alt133) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1052:20: expression
  							{
  							pushFollow(FOLLOW_expression_in_forControl4571);
  							expression();
  							state._fsp--;
  							if (state.failed) return;
  							}
  							break;
  
  					}
  
  					match(input,52,FOLLOW_52_in_forControl4574); if (state.failed) return;
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1052:36: ( forUpdate )?
  					int alt134=2;
  					int LA134_0 = input.LA(1);
  					if ( ((LA134_0 >= CharacterLiteral && LA134_0 <= DecimalLiteral)||LA134_0==FloatingPointLiteral||(LA134_0 >= HexLiteral && LA134_0 <= Identifier)||(LA134_0 >= OctalLiteral && LA134_0 <= StringLiteral)||LA134_0==29||LA134_0==36||(LA134_0 >= 40 && LA134_0 <= 41)||(LA134_0 >= 44 && LA134_0 <= 45)||LA134_0==53||LA134_0==65||LA134_0==67||(LA134_0 >= 70 && LA134_0 <= 71)||LA134_0==77||(LA134_0 >= 79 && LA134_0 <= 80)||LA134_0==82||LA134_0==85||LA134_0==92||LA134_0==94||(LA134_0 >= 97 && LA134_0 <= 98)||LA134_0==105||LA134_0==108||LA134_0==111||LA134_0==115||LA134_0==118||LA134_0==126) ) {
  						alt134=1;
  					}
  					switch (alt134) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:1052:36: forUpdate
  							{
  							pushFollow(FOLLOW_forUpdate_in_forControl4576);
  							forUpdate();
  							state._fsp--;
  							if (state.failed) return;
  							}
  							break;
  
  					}
  
  					}
  					break;
  
  			}
  			if ( state.backtracking==0 ) {
  			            addLocalDeclaration( VarDecl_stack.peek().descr );
  			            decreaseLevel();
  			        }
  		}
  		catch (RecognitionException re) {
  			reportError(re);
  			recover(input,re);
  		}
  		finally {
  			// do for sure before leaving
  			if ( state.backtracking>0 ) { memoize(input, 100, forControl_StartIndex); }
  
  			VarDecl_stack.pop();
  
  		}
  	}