docs: public final void modifyStatement() throws RecognitionException {
  		int modifyStatement_StartIndex = input.index();
  
  		Token s=null;
  		Token c=null;
  		ParserRuleReturnScope e =null;
  		ParserRuleReturnScope parExpression7 =null;
  
  
  		        JavaModifyBlockDescr d = null;
  		    
  		try {
  			if ( state.backtracking>0 && alreadyParsedRule(input, 89) ) { return; }
  
  			// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:921:5: (s= 'modify' parExpression '{' (e= expression ( ',' e= expression )* )? c= '}' )
  			// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:921:7: s= 'modify' parExpression '{' (e= expression ( ',' e= expression )* )? c= '}'
  			{
  			s=(Token)match(input,95,FOLLOW_95_in_modifyStatement3951); if (state.failed) return;
  			pushFollow(FOLLOW_parExpression_in_modifyStatement3953);
  			parExpression7=parExpression();
  			state._fsp--;
  			if (state.failed) return;
  			if ( state.backtracking==0 ) {
  			        d = new JavaModifyBlockDescr( (parExpression7!=null?input.toString(parExpression7.start,parExpression7.stop):null) );
  			        d.setStart( ((CommonToken)s).getStartIndex() );
  			        d.setInScopeLocalVars( getLocalDeclarations() );
  			        this.addBlockDescr( d );
  
  			    }
  			match(input,121,FOLLOW_121_in_modifyStatement3965); if (state.failed) return;
  			// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:929:9: (e= expression ( ',' e= expression )* )?
  			int alt125=2;
  			int LA125_0 = input.LA(1);
  			if ( ((LA125_0 >= CharacterLiteral && LA125_0 <= DecimalLiteral)||LA125_0==FloatingPointLiteral||(LA125_0 >= HexLiteral && LA125_0 <= Identifier)||(LA125_0 >= OctalLiteral && LA125_0 <= StringLiteral)||LA125_0==29||LA125_0==36||(LA125_0 >= 40 && LA125_0 <= 41)||(LA125_0 >= 44 && LA125_0 <= 45)||LA125_0==53||LA125_0==65||LA125_0==67||(LA125_0 >= 70 && LA125_0 <= 71)||LA125_0==77||(LA125_0 >= 79 && LA125_0 <= 80)||LA125_0==82||LA125_0==85||LA125_0==92||LA125_0==94||(LA125_0 >= 97 && LA125_0 <= 98)||LA125_0==105||LA125_0==108||LA125_0==111||LA125_0==115||LA125_0==118||LA125_0==126) ) {
  				alt125=1;
  			}
  			switch (alt125) {
  				case 1 :
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:929:11: e= expression ( ',' e= expression )*
  					{
  					pushFollow(FOLLOW_expression_in_modifyStatement3973);
  					e=expression();
  					state._fsp--;
  					if (state.failed) return;
  					if ( state.backtracking==0 ) { d.getExpressions().add( (e!=null?input.toString(e.start,e.stop):null) ); }
  					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:930:12: ( ',' e= expression )*
  					loop124:
  					while (true) {
  						int alt124=2;
  						int LA124_0 = input.LA(1);
  						if ( (LA124_0==43) ) {
  							alt124=1;
  						}
  
  						switch (alt124) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:930:13: ',' e= expression
  							{
  							match(input,43,FOLLOW_43_in_modifyStatement3989); if (state.failed) return;
  							pushFollow(FOLLOW_expression_in_modifyStatement3993);
  							e=expression();
  							state._fsp--;
  							if (state.failed) return;
  							if ( state.backtracking==0 ) { d.getExpressions().add( (e!=null?input.toString(e.start,e.stop):null) ); }
  							}
  							break;
  
  						default :
  							break loop124;
  						}
  					}
  
  					}
  					break;
  
  			}
  
  			c=(Token)match(input,125,FOLLOW_125_in_modifyStatement4017); if (state.failed) return;
  			if ( state.backtracking==0 ) {
  			            d.setEnd( ((CommonToken)c).getStopIndex() ); 
  			        }
  			}
  
  		}
  		catch (RecognitionException re) {
  			reportError(re);
  			recover(input,re);
  		}
  		finally {
  			// do for sure before leaving
  			if ( state.backtracking>0 ) { memoize(input, 89, modifyStatement_StartIndex); }
  
  		}
  	}