docs: public final EObject ruleSarlXLoopFormalParameter() throws RecognitionException {
          EObject current = null;
  
          Token lv_extension_1_0=null;
          Token otherlv_3=null;
          AntlrDatatypeRuleToken lv_name_2_0 = null;
  
          EObject lv_parameterType_4_0 = null;
  
  
  
          	enterRule();
  
          try {
              // InternalSARL.g:8462:2: ( ( () ( (lv_extension_1_0= 'extension' ) )? ( (lv_name_2_0= ruleValidID ) ) (otherlv_3= 'as' ( (lv_parameterType_4_0= ruleJvmTypeReference ) ) )? ) )
              // InternalSARL.g:8463:2: ( () ( (lv_extension_1_0= 'extension' ) )? ( (lv_name_2_0= ruleValidID ) ) (otherlv_3= 'as' ( (lv_parameterType_4_0= ruleJvmTypeReference ) ) )? )
              {
              // InternalSARL.g:8463:2: ( () ( (lv_extension_1_0= 'extension' ) )? ( (lv_name_2_0= ruleValidID ) ) (otherlv_3= 'as' ( (lv_parameterType_4_0= ruleJvmTypeReference ) ) )? )
              // InternalSARL.g:8464:3: () ( (lv_extension_1_0= 'extension' ) )? ( (lv_name_2_0= ruleValidID ) ) (otherlv_3= 'as' ( (lv_parameterType_4_0= ruleJvmTypeReference ) ) )?
              {
              // InternalSARL.g:8464:3: ()
              // InternalSARL.g:8465:4: 
              {
              if ( state.backtracking==0 ) {
  
                				current = forceCreateModelElement(
                					grammarAccess.getSarlXLoopFormalParameterAccess().getXtendFormalParameterAction_0(),
                					current);
                			
              }
  
              }
  
              // InternalSARL.g:8471:3: ( (lv_extension_1_0= 'extension' ) )?
              int alt229=2;
              int LA229_0 = input.LA(1);
  
              if ( (LA229_0==45) ) {
                  alt229=1;
              }
              switch (alt229) {
                  case 1 :
                      // InternalSARL.g:8472:4: (lv_extension_1_0= 'extension' )
                      {
                      // InternalSARL.g:8472:4: (lv_extension_1_0= 'extension' )
                      // InternalSARL.g:8473:5: lv_extension_1_0= 'extension'
                      {
                      lv_extension_1_0=(Token)match(input,45,FOLLOW_3); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        					newLeafNode(lv_extension_1_0, grammarAccess.getSarlXLoopFormalParameterAccess().getExtensionExtensionKeyword_1_0());
                        				
                      }
                      if ( state.backtracking==0 ) {
  
                        					if (current==null) {
                        						current = createModelElement(grammarAccess.getSarlXLoopFormalParameterRule());
                        					}
                        					setWithLastConsumed(current, "extension", true, "extension");
                        				
                      }
  
                      }
  
  
                      }
                      break;
  
              }
  
              // InternalSARL.g:8485:3: ( (lv_name_2_0= ruleValidID ) )
              // InternalSARL.g:8486:4: (lv_name_2_0= ruleValidID )
              {
              // InternalSARL.g:8486:4: (lv_name_2_0= ruleValidID )
              // InternalSARL.g:8487:5: lv_name_2_0= ruleValidID
              {
              if ( state.backtracking==0 ) {
  
                					newCompositeNode(grammarAccess.getSarlXLoopFormalParameterAccess().getNameValidIDParserRuleCall_2_0());
                				
              }
              pushFollow(FOLLOW_74);
              lv_name_2_0=ruleValidID();
  
              state._fsp--;
              if (state.failed) return current;
              if ( state.backtracking==0 ) {
  
                					if (current==null) {
                						current = createModelElementForParent(grammarAccess.getSarlXLoopFormalParameterRule());
                					}
                					set(
                						current,
                						"name",
                						lv_name_2_0,
                						"org.eclipse.xtend.core.Xtend.ValidID");
                					afterParserOrEnumRuleCall();
                				
              }
  
              }
  
  
              }
  
              // InternalSARL.g:8504:3: (otherlv_3= 'as' ( (lv_parameterType_4_0= ruleJvmTypeReference ) ) )?
              int alt230=2;
              int LA230_0 = input.LA(1);
  
              if ( (LA230_0==64) ) {
                  alt230=1;
              }
              switch (alt230) {
                  case 1 :
                      // InternalSARL.g:8505:4: otherlv_3= 'as' ( (lv_parameterType_4_0= ruleJvmTypeReference ) )
                      {
                      otherlv_3=(Token)match(input,64,FOLLOW_41); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        				newLeafNode(otherlv_3, grammarAccess.getSarlXLoopFormalParameterAccess().getAsKeyword_3_0());
                        			
                      }
                      // InternalSARL.g:8509:4: ( (lv_parameterType_4_0= ruleJvmTypeReference ) )
                      // InternalSARL.g:8510:5: (lv_parameterType_4_0= ruleJvmTypeReference )
                      {
                      // InternalSARL.g:8510:5: (lv_parameterType_4_0= ruleJvmTypeReference )
                      // InternalSARL.g:8511:6: lv_parameterType_4_0= ruleJvmTypeReference
                      {
                      if ( state.backtracking==0 ) {
  
                        						newCompositeNode(grammarAccess.getSarlXLoopFormalParameterAccess().getParameterTypeJvmTypeReferenceParserRuleCall_3_1_0());
                        					
                      }
                      pushFollow(FOLLOW_2);
                      lv_parameterType_4_0=ruleJvmTypeReference();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        						if (current==null) {
                        							current = createModelElementForParent(grammarAccess.getSarlXLoopFormalParameterRule());
                        						}
                        						set(
                        							current,
                        							"parameterType",
                        							lv_parameterType_4_0,
                        							"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
                        						afterParserOrEnumRuleCall();
                        					
                      }
  
                      }
  
  
                      }
  
  
                      }
                      break;
  
              }
  
  
              }
  
  
              }
  
              if ( state.backtracking==0 ) {
  
                	leaveRule();
  
              }
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }