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;
    }
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 { { { { 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 ( ) ) ; } 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 : { { { 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 ( ) ; } } } loop339 : do { int alt339 = 2 ; int LA339_0 = input . LA ( 1 ) ; if ( ( LA339_0 == 32 ) ) { alt339 = 1 ; } switch ( alt339 ) { case 1 : { 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 ( ) ) ; } { { 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 ( ) ) ; } 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 : { { 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 ( ) ) ; } 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 : { { { 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 ( ) ; } } } loop342 : do { int alt342 = 2 ; int LA342_0 = input . LA ( 1 ) ; if ( ( LA342_0 == 32 ) ) { alt342 = 1 ; } switch ( alt342 ) { case 1 : { 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 ( ) ) ; } { { 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 ( ) ) ; } { { 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 ; }
InternalSARL.g:14423:1: ruleXBasicForLoopExpression returns [EObject current=null] : ( () 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 ) ) ) ;