docs: public final EObject ruleXBasicForLoopExpression() throws RecognitionException {
          EObject current = null;
  
          Token otherlv_1=null;
          Token otherlv_2=null;
          Token otherlv_4=null;
          Token otherlv_6=null;
          Token otherlv_8=null;
          Token otherlv_10=null;
          Token otherlv_12=null;
          EObject lv_initExpressions_3_0 = null;
  
          EObject lv_initExpressions_5_0 = null;
  
          EObject lv_expression_7_0 = null;
  
          EObject lv_updateExpressions_9_0 = null;
  
          EObject lv_updateExpressions_11_0 = null;
  
          EObject lv_eachExpression_13_0 = null;
  
  
  
          	enterRule();
  
          try {
              // InternalSARL.g:14429:2: ( ( () otherlv_1= 'for' otherlv_2= '(' ( ( (lv_initExpressions_3_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_4= ',' ( (lv_initExpressions_5_0= ruleXExpressionOrVarDeclaration ) ) )* )? otherlv_6= ';' ( (lv_expression_7_0= ruleXExpression ) )? otherlv_8= ';' ( ( (lv_updateExpressions_9_0= ruleXExpression ) ) (otherlv_10= ',' ( (lv_updateExpressions_11_0= ruleXExpression ) ) )* )? otherlv_12= ')' ( (lv_eachExpression_13_0= ruleXExpression ) ) ) )
              // InternalSARL.g:14430:2: ( () otherlv_1= 'for' otherlv_2= '(' ( ( (lv_initExpressions_3_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_4= ',' ( (lv_initExpressions_5_0= ruleXExpressionOrVarDeclaration ) ) )* )? otherlv_6= ';' ( (lv_expression_7_0= ruleXExpression ) )? otherlv_8= ';' ( ( (lv_updateExpressions_9_0= ruleXExpression ) ) (otherlv_10= ',' ( (lv_updateExpressions_11_0= ruleXExpression ) ) )* )? otherlv_12= ')' ( (lv_eachExpression_13_0= ruleXExpression ) ) )
              {
              // InternalSARL.g:14430:2: ( () otherlv_1= 'for' otherlv_2= '(' ( ( (lv_initExpressions_3_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_4= ',' ( (lv_initExpressions_5_0= ruleXExpressionOrVarDeclaration ) ) )* )? otherlv_6= ';' ( (lv_expression_7_0= ruleXExpression ) )? otherlv_8= ';' ( ( (lv_updateExpressions_9_0= ruleXExpression ) ) (otherlv_10= ',' ( (lv_updateExpressions_11_0= ruleXExpression ) ) )* )? otherlv_12= ')' ( (lv_eachExpression_13_0= ruleXExpression ) ) )
              // InternalSARL.g:14431:3: () otherlv_1= 'for' otherlv_2= '(' ( ( (lv_initExpressions_3_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_4= ',' ( (lv_initExpressions_5_0= ruleXExpressionOrVarDeclaration ) ) )* )? otherlv_6= ';' ( (lv_expression_7_0= ruleXExpression ) )? otherlv_8= ';' ( ( (lv_updateExpressions_9_0= ruleXExpression ) ) (otherlv_10= ',' ( (lv_updateExpressions_11_0= ruleXExpression ) ) )* )? otherlv_12= ')' ( (lv_eachExpression_13_0= ruleXExpression ) )
              {
              // InternalSARL.g:14431:3: ()
              // InternalSARL.g:14432:4: 
              {
              if ( state.backtracking==0 ) {
  
                				current = forceCreateModelElement(
                					grammarAccess.getXBasicForLoopExpressionAccess().getXBasicForLoopExpressionAction_0(),
                					current);
                			
              }
  
              }
  
              otherlv_1=(Token)match(input,67,FOLLOW_80); if (state.failed) return current;
              if ( state.backtracking==0 ) {
  
                			newLeafNode(otherlv_1, grammarAccess.getXBasicForLoopExpressionAccess().getForKeyword_1());
                		
              }
              otherlv_2=(Token)match(input,49,FOLLOW_139); if (state.failed) return current;
              if ( state.backtracking==0 ) {
  
                			newLeafNode(otherlv_2, grammarAccess.getXBasicForLoopExpressionAccess().getLeftParenthesisKeyword_2());
                		
              }
              // InternalSARL.g:14446:3: ( ( (lv_initExpressions_3_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_4= ',' ( (lv_initExpressions_5_0= ruleXExpressionOrVarDeclaration ) ) )* )?
              int alt340=2;
              int LA340_0 = input.LA(1);
  
              if ( ((LA340_0>=RULE_STRING && LA340_0<=RULE_RICH_TEXT_START)||(LA340_0>=RULE_HEX && LA340_0<=RULE_DECIMAL)||LA340_0==25||(LA340_0>=28 && LA340_0<=29)||LA340_0==36||(LA340_0>=39 && LA340_0<=40)||(LA340_0>=42 && LA340_0<=45)||(LA340_0>=48 && LA340_0<=49)||LA340_0==51||LA340_0==55||(LA340_0>=60 && LA340_0<=63)||(LA340_0>=65 && LA340_0<=68)||(LA340_0>=73 && LA340_0<=75)||(LA340_0>=78 && LA340_0<=96)||LA340_0==106||LA340_0==129||(LA340_0>=131 && LA340_0<=140)) ) {
                  alt340=1;
              }
              switch (alt340) {
                  case 1 :
                      // InternalSARL.g:14447:4: ( (lv_initExpressions_3_0= ruleXExpressionOrVarDeclaration ) ) (otherlv_4= ',' ( (lv_initExpressions_5_0= ruleXExpressionOrVarDeclaration ) ) )*
                      {
                      // InternalSARL.g:14447:4: ( (lv_initExpressions_3_0= ruleXExpressionOrVarDeclaration ) )
                      // InternalSARL.g:14448:5: (lv_initExpressions_3_0= ruleXExpressionOrVarDeclaration )
                      {
                      // InternalSARL.g:14448:5: (lv_initExpressions_3_0= ruleXExpressionOrVarDeclaration )
                      // InternalSARL.g:14449:6: lv_initExpressions_3_0= ruleXExpressionOrVarDeclaration
                      {
                      if ( state.backtracking==0 ) {
  
                        						newCompositeNode(grammarAccess.getXBasicForLoopExpressionAccess().getInitExpressionsXExpressionOrVarDeclarationParserRuleCall_3_0_0());
                        					
                      }
                      pushFollow(FOLLOW_140);
                      lv_initExpressions_3_0=ruleXExpressionOrVarDeclaration();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        						if (current==null) {
                        							current = createModelElementForParent(grammarAccess.getXBasicForLoopExpressionRule());
                        						}
                        						add(
                        							current,
                        							"initExpressions",
                        							lv_initExpressions_3_0,
                        							"org.eclipse.xtext.xbase.Xbase.XExpressionOrVarDeclaration");
                        						afterParserOrEnumRuleCall();
                        					
                      }
  
                      }
  
  
                      }
  
                      // InternalSARL.g:14466:4: (otherlv_4= ',' ( (lv_initExpressions_5_0= ruleXExpressionOrVarDeclaration ) ) )*
                      loop339:
                      do {
                          int alt339=2;
                          int LA339_0 = input.LA(1);
  
                          if ( (LA339_0==32) ) {
                              alt339=1;
                          }
  
  
                          switch (alt339) {
                      	case 1 :
                      	    // InternalSARL.g:14467:5: otherlv_4= ',' ( (lv_initExpressions_5_0= ruleXExpressionOrVarDeclaration ) )
                      	    {
                      	    otherlv_4=(Token)match(input,32,FOLLOW_141); if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      					newLeafNode(otherlv_4, grammarAccess.getXBasicForLoopExpressionAccess().getCommaKeyword_3_1_0());
                      	      				
                      	    }
                      	    // InternalSARL.g:14471:5: ( (lv_initExpressions_5_0= ruleXExpressionOrVarDeclaration ) )
                      	    // InternalSARL.g:14472:6: (lv_initExpressions_5_0= ruleXExpressionOrVarDeclaration )
                      	    {
                      	    // InternalSARL.g:14472:6: (lv_initExpressions_5_0= ruleXExpressionOrVarDeclaration )
                      	    // InternalSARL.g:14473:7: lv_initExpressions_5_0= ruleXExpressionOrVarDeclaration
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      							newCompositeNode(grammarAccess.getXBasicForLoopExpressionAccess().getInitExpressionsXExpressionOrVarDeclarationParserRuleCall_3_1_1_0());
                      	      						
                      	    }
                      	    pushFollow(FOLLOW_140);
                      	    lv_initExpressions_5_0=ruleXExpressionOrVarDeclaration();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      							if (current==null) {
                      	      								current = createModelElementForParent(grammarAccess.getXBasicForLoopExpressionRule());
                      	      							}
                      	      							add(
                      	      								current,
                      	      								"initExpressions",
                      	      								lv_initExpressions_5_0,
                      	      								"org.eclipse.xtext.xbase.Xbase.XExpressionOrVarDeclaration");
                      	      							afterParserOrEnumRuleCall();
                      	      						
                      	    }
  
                      	    }
  
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop339;
                          }
                      } while (true);
  
  
                      }
                      break;
  
              }
  
              otherlv_6=(Token)match(input,26,FOLLOW_82); if (state.failed) return current;
              if ( state.backtracking==0 ) {
  
                			newLeafNode(otherlv_6, grammarAccess.getXBasicForLoopExpressionAccess().getSemicolonKeyword_4());
                		
              }
              // InternalSARL.g:14496:3: ( (lv_expression_7_0= ruleXExpression ) )?
              int alt341=2;
              int LA341_0 = input.LA(1);
  
              if ( ((LA341_0>=RULE_STRING && LA341_0<=RULE_RICH_TEXT_START)||(LA341_0>=RULE_HEX && LA341_0<=RULE_DECIMAL)||LA341_0==25||(LA341_0>=28 && LA341_0<=29)||LA341_0==36||(LA341_0>=39 && LA341_0<=40)||(LA341_0>=42 && LA341_0<=45)||(LA341_0>=48 && LA341_0<=49)||LA341_0==51||LA341_0==55||(LA341_0>=60 && LA341_0<=63)||(LA341_0>=67 && LA341_0<=68)||(LA341_0>=73 && LA341_0<=75)||(LA341_0>=78 && LA341_0<=96)||LA341_0==106||LA341_0==129||(LA341_0>=131 && LA341_0<=140)) ) {
                  alt341=1;
              }
              switch (alt341) {
                  case 1 :
                      // InternalSARL.g:14497:4: (lv_expression_7_0= ruleXExpression )
                      {
                      // InternalSARL.g:14497:4: (lv_expression_7_0= ruleXExpression )
                      // InternalSARL.g:14498:5: lv_expression_7_0= ruleXExpression
                      {
                      if ( state.backtracking==0 ) {
  
                        					newCompositeNode(grammarAccess.getXBasicForLoopExpressionAccess().getExpressionXExpressionParserRuleCall_5_0());
                        				
                      }
                      pushFollow(FOLLOW_142);
                      lv_expression_7_0=ruleXExpression();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        					if (current==null) {
                        						current = createModelElementForParent(grammarAccess.getXBasicForLoopExpressionRule());
                        					}
                        					set(
                        						current,
                        						"expression",
                        						lv_expression_7_0,
                        						"org.eclipse.xtext.xbase.Xbase.XExpression");
                        					afterParserOrEnumRuleCall();
                        				
                      }
  
                      }
  
  
                      }
                      break;
  
              }
  
              otherlv_8=(Token)match(input,26,FOLLOW_143); if (state.failed) return current;
              if ( state.backtracking==0 ) {
  
                			newLeafNode(otherlv_8, grammarAccess.getXBasicForLoopExpressionAccess().getSemicolonKeyword_6());
                		
              }
              // InternalSARL.g:14519:3: ( ( (lv_updateExpressions_9_0= ruleXExpression ) ) (otherlv_10= ',' ( (lv_updateExpressions_11_0= ruleXExpression ) ) )* )?
              int alt343=2;
              int LA343_0 = input.LA(1);
  
              if ( ((LA343_0>=RULE_STRING && LA343_0<=RULE_RICH_TEXT_START)||(LA343_0>=RULE_HEX && LA343_0<=RULE_DECIMAL)||LA343_0==25||(LA343_0>=28 && LA343_0<=29)||LA343_0==36||(LA343_0>=39 && LA343_0<=40)||(LA343_0>=42 && LA343_0<=45)||(LA343_0>=48 && LA343_0<=49)||LA343_0==51||LA343_0==55||(LA343_0>=60 && LA343_0<=63)||(LA343_0>=67 && LA343_0<=68)||(LA343_0>=73 && LA343_0<=75)||(LA343_0>=78 && LA343_0<=96)||LA343_0==106||LA343_0==129||(LA343_0>=131 && LA343_0<=140)) ) {
                  alt343=1;
              }
              switch (alt343) {
                  case 1 :
                      // InternalSARL.g:14520:4: ( (lv_updateExpressions_9_0= ruleXExpression ) ) (otherlv_10= ',' ( (lv_updateExpressions_11_0= ruleXExpression ) ) )*
                      {
                      // InternalSARL.g:14520:4: ( (lv_updateExpressions_9_0= ruleXExpression ) )
                      // InternalSARL.g:14521:5: (lv_updateExpressions_9_0= ruleXExpression )
                      {
                      // InternalSARL.g:14521:5: (lv_updateExpressions_9_0= ruleXExpression )
                      // InternalSARL.g:14522:6: lv_updateExpressions_9_0= ruleXExpression
                      {
                      if ( state.backtracking==0 ) {
  
                        						newCompositeNode(grammarAccess.getXBasicForLoopExpressionAccess().getUpdateExpressionsXExpressionParserRuleCall_7_0_0());
                        					
                      }
                      pushFollow(FOLLOW_51);
                      lv_updateExpressions_9_0=ruleXExpression();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        						if (current==null) {
                        							current = createModelElementForParent(grammarAccess.getXBasicForLoopExpressionRule());
                        						}
                        						add(
                        							current,
                        							"updateExpressions",
                        							lv_updateExpressions_9_0,
                        							"org.eclipse.xtext.xbase.Xbase.XExpression");
                        						afterParserOrEnumRuleCall();
                        					
                      }
  
                      }
  
  
                      }
  
                      // InternalSARL.g:14539:4: (otherlv_10= ',' ( (lv_updateExpressions_11_0= ruleXExpression ) ) )*
                      loop342:
                      do {
                          int alt342=2;
                          int LA342_0 = input.LA(1);
  
                          if ( (LA342_0==32) ) {
                              alt342=1;
                          }
  
  
                          switch (alt342) {
                      	case 1 :
                      	    // InternalSARL.g:14540:5: otherlv_10= ',' ( (lv_updateExpressions_11_0= ruleXExpression ) )
                      	    {
                      	    otherlv_10=(Token)match(input,32,FOLLOW_45); if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      					newLeafNode(otherlv_10, grammarAccess.getXBasicForLoopExpressionAccess().getCommaKeyword_7_1_0());
                      	      				
                      	    }
                      	    // InternalSARL.g:14544:5: ( (lv_updateExpressions_11_0= ruleXExpression ) )
                      	    // InternalSARL.g:14545:6: (lv_updateExpressions_11_0= ruleXExpression )
                      	    {
                      	    // InternalSARL.g:14545:6: (lv_updateExpressions_11_0= ruleXExpression )
                      	    // InternalSARL.g:14546:7: lv_updateExpressions_11_0= ruleXExpression
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      							newCompositeNode(grammarAccess.getXBasicForLoopExpressionAccess().getUpdateExpressionsXExpressionParserRuleCall_7_1_1_0());
                      	      						
                      	    }
                      	    pushFollow(FOLLOW_51);
                      	    lv_updateExpressions_11_0=ruleXExpression();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      							if (current==null) {
                      	      								current = createModelElementForParent(grammarAccess.getXBasicForLoopExpressionRule());
                      	      							}
                      	      							add(
                      	      								current,
                      	      								"updateExpressions",
                      	      								lv_updateExpressions_11_0,
                      	      								"org.eclipse.xtext.xbase.Xbase.XExpression");
                      	      							afterParserOrEnumRuleCall();
                      	      						
                      	    }
  
                      	    }
  
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop342;
                          }
                      } while (true);
  
  
                      }
                      break;
  
              }
  
              otherlv_12=(Token)match(input,50,FOLLOW_45); if (state.failed) return current;
              if ( state.backtracking==0 ) {
  
                			newLeafNode(otherlv_12, grammarAccess.getXBasicForLoopExpressionAccess().getRightParenthesisKeyword_8());
                		
              }
              // InternalSARL.g:14569:3: ( (lv_eachExpression_13_0= ruleXExpression ) )
              // InternalSARL.g:14570:4: (lv_eachExpression_13_0= ruleXExpression )
              {
              // InternalSARL.g:14570:4: (lv_eachExpression_13_0= ruleXExpression )
              // InternalSARL.g:14571:5: lv_eachExpression_13_0= ruleXExpression
              {
              if ( state.backtracking==0 ) {
  
                					newCompositeNode(grammarAccess.getXBasicForLoopExpressionAccess().getEachExpressionXExpressionParserRuleCall_9_0());
                				
              }
              pushFollow(FOLLOW_2);
              lv_eachExpression_13_0=ruleXExpression();
  
              state._fsp--;
              if (state.failed) return current;
              if ( state.backtracking==0 ) {
  
                					if (current==null) {
                						current = createModelElementForParent(grammarAccess.getXBasicForLoopExpressionRule());
                					}
                					set(
                						current,
                						"eachExpression",
                						lv_eachExpression_13_0,
                						"org.eclipse.xtext.xbase.Xbase.XExpression");
                					afterParserOrEnumRuleCall();
                				
              }
  
              }
  
  
              }
  
  
              }
  
  
              }
  
              if ( state.backtracking==0 ) {
  
                	leaveRule();
  
              }
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }