docs: public final EObject ruleParameter() throws RecognitionException {
          EObject current = null;
  
          Token lv_extension_2_0=null;
          Token otherlv_5=null;
          Token lv_varArg_7_0=null;
          Token otherlv_8=null;
          EObject lv_annotations_1_0 = null;
  
          EObject lv_annotations_3_0 = null;
  
          AntlrDatatypeRuleToken lv_name_4_0 = null;
  
          EObject lv_parameterType_6_0 = null;
  
          EObject lv_defaultValue_9_0 = null;
  
  
  
          	enterRule();
  
          try {
              // InternalSARL.g:7253:2: ( ( () ( (lv_annotations_1_0= ruleXAnnotation ) )* ( ( (lv_extension_2_0= 'extension' ) ) ( (lv_annotations_3_0= ruleXAnnotation ) )* )? ( (lv_name_4_0= ruleValidID ) ) otherlv_5= ':' ( (lv_parameterType_6_0= ruleJvmTypeReference ) ) ( ( (lv_varArg_7_0= '*' ) ) | (otherlv_8= '=' ( (lv_defaultValue_9_0= ruleXExpression ) ) ) )? ) )
              // InternalSARL.g:7254:2: ( () ( (lv_annotations_1_0= ruleXAnnotation ) )* ( ( (lv_extension_2_0= 'extension' ) ) ( (lv_annotations_3_0= ruleXAnnotation ) )* )? ( (lv_name_4_0= ruleValidID ) ) otherlv_5= ':' ( (lv_parameterType_6_0= ruleJvmTypeReference ) ) ( ( (lv_varArg_7_0= '*' ) ) | (otherlv_8= '=' ( (lv_defaultValue_9_0= ruleXExpression ) ) ) )? )
              {
              // InternalSARL.g:7254:2: ( () ( (lv_annotations_1_0= ruleXAnnotation ) )* ( ( (lv_extension_2_0= 'extension' ) ) ( (lv_annotations_3_0= ruleXAnnotation ) )* )? ( (lv_name_4_0= ruleValidID ) ) otherlv_5= ':' ( (lv_parameterType_6_0= ruleJvmTypeReference ) ) ( ( (lv_varArg_7_0= '*' ) ) | (otherlv_8= '=' ( (lv_defaultValue_9_0= ruleXExpression ) ) ) )? )
              // InternalSARL.g:7255:3: () ( (lv_annotations_1_0= ruleXAnnotation ) )* ( ( (lv_extension_2_0= 'extension' ) ) ( (lv_annotations_3_0= ruleXAnnotation ) )* )? ( (lv_name_4_0= ruleValidID ) ) otherlv_5= ':' ( (lv_parameterType_6_0= ruleJvmTypeReference ) ) ( ( (lv_varArg_7_0= '*' ) ) | (otherlv_8= '=' ( (lv_defaultValue_9_0= ruleXExpression ) ) ) )?
              {
              // InternalSARL.g:7255:3: ()
              // InternalSARL.g:7256:4: 
              {
              if ( state.backtracking==0 ) {
  
                				current = forceCreateModelElement(
                					grammarAccess.getParameterAccess().getSarlFormalParameterAction_0(),
                					current);
                			
              }
  
              }
  
              // InternalSARL.g:7262:3: ( (lv_annotations_1_0= ruleXAnnotation ) )*
              loop211:
              do {
                  int alt211=2;
                  int LA211_0 = input.LA(1);
  
                  if ( (LA211_0==105) ) {
                      alt211=1;
                  }
  
  
                  switch (alt211) {
              	case 1 :
              	    // InternalSARL.g:7263:4: (lv_annotations_1_0= ruleXAnnotation )
              	    {
              	    // InternalSARL.g:7263:4: (lv_annotations_1_0= ruleXAnnotation )
              	    // InternalSARL.g:7264:5: lv_annotations_1_0= ruleXAnnotation
              	    {
              	    if ( state.backtracking==0 ) {
  
              	      					newCompositeNode(grammarAccess.getParameterAccess().getAnnotationsXAnnotationParserRuleCall_1_0());
              	      				
              	    }
              	    pushFollow(FOLLOW_52);
              	    lv_annotations_1_0=ruleXAnnotation();
  
              	    state._fsp--;
              	    if (state.failed) return current;
              	    if ( state.backtracking==0 ) {
  
              	      					if (current==null) {
              	      						current = createModelElementForParent(grammarAccess.getParameterRule());
              	      					}
              	      					add(
              	      						current,
              	      						"annotations",
              	      						lv_annotations_1_0,
              	      						"org.eclipse.xtext.xbase.annotations.XbaseWithAnnotations.XAnnotation");
              	      					afterParserOrEnumRuleCall();
              	      				
              	    }
  
              	    }
  
  
              	    }
              	    break;
  
              	default :
              	    break loop211;
                  }
              } while (true);
  
              // InternalSARL.g:7281:3: ( ( (lv_extension_2_0= 'extension' ) ) ( (lv_annotations_3_0= ruleXAnnotation ) )* )?
              int alt213=2;
              int LA213_0 = input.LA(1);
  
              if ( (LA213_0==45) ) {
                  alt213=1;
              }
              switch (alt213) {
                  case 1 :
                      // InternalSARL.g:7282:4: ( (lv_extension_2_0= 'extension' ) ) ( (lv_annotations_3_0= ruleXAnnotation ) )*
                      {
                      // InternalSARL.g:7282:4: ( (lv_extension_2_0= 'extension' ) )
                      // InternalSARL.g:7283:5: (lv_extension_2_0= 'extension' )
                      {
                      // InternalSARL.g:7283:5: (lv_extension_2_0= 'extension' )
                      // InternalSARL.g:7284:6: lv_extension_2_0= 'extension'
                      {
                      lv_extension_2_0=(Token)match(input,45,FOLLOW_70); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        						newLeafNode(lv_extension_2_0, grammarAccess.getParameterAccess().getExtensionExtensionKeyword_2_0_0());
                        					
                      }
                      if ( state.backtracking==0 ) {
  
                        						if (current==null) {
                        							current = createModelElement(grammarAccess.getParameterRule());
                        						}
                        						setWithLastConsumed(current, "extension", true, "extension");
                        					
                      }
  
                      }
  
  
                      }
  
                      // InternalSARL.g:7296:4: ( (lv_annotations_3_0= ruleXAnnotation ) )*
                      loop212:
                      do {
                          int alt212=2;
                          int LA212_0 = input.LA(1);
  
                          if ( (LA212_0==105) ) {
                              alt212=1;
                          }
  
  
                          switch (alt212) {
                      	case 1 :
                      	    // InternalSARL.g:7297:5: (lv_annotations_3_0= ruleXAnnotation )
                      	    {
                      	    // InternalSARL.g:7297:5: (lv_annotations_3_0= ruleXAnnotation )
                      	    // InternalSARL.g:7298:6: lv_annotations_3_0= ruleXAnnotation
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      						newCompositeNode(grammarAccess.getParameterAccess().getAnnotationsXAnnotationParserRuleCall_2_1_0());
                      	      					
                      	    }
                      	    pushFollow(FOLLOW_70);
                      	    lv_annotations_3_0=ruleXAnnotation();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      						if (current==null) {
                      	      							current = createModelElementForParent(grammarAccess.getParameterRule());
                      	      						}
                      	      						add(
                      	      							current,
                      	      							"annotations",
                      	      							lv_annotations_3_0,
                      	      							"org.eclipse.xtext.xbase.annotations.XbaseWithAnnotations.XAnnotation");
                      	      						afterParserOrEnumRuleCall();
                      	      					
                      	    }
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop212;
                          }
                      } while (true);
  
  
                      }
                      break;
  
              }
  
              // InternalSARL.g:7316:3: ( (lv_name_4_0= ruleValidID ) )
              // InternalSARL.g:7317:4: (lv_name_4_0= ruleValidID )
              {
              // InternalSARL.g:7317:4: (lv_name_4_0= ruleValidID )
              // InternalSARL.g:7318:5: lv_name_4_0= ruleValidID
              {
              if ( state.backtracking==0 ) {
  
                					newCompositeNode(grammarAccess.getParameterAccess().getNameValidIDParserRuleCall_3_0());
                				
              }
              pushFollow(FOLLOW_40);
              lv_name_4_0=ruleValidID();
  
              state._fsp--;
              if (state.failed) return current;
              if ( state.backtracking==0 ) {
  
                					if (current==null) {
                						current = createModelElementForParent(grammarAccess.getParameterRule());
                					}
                					set(
                						current,
                						"name",
                						lv_name_4_0,
                						"org.eclipse.xtend.core.Xtend.ValidID");
                					afterParserOrEnumRuleCall();
                				
              }
  
              }
  
  
              }
  
              otherlv_5=(Token)match(input,46,FOLLOW_41); if (state.failed) return current;
              if ( state.backtracking==0 ) {
  
                			newLeafNode(otherlv_5, grammarAccess.getParameterAccess().getColonKeyword_4());
                		
              }
              // InternalSARL.g:7339:3: ( (lv_parameterType_6_0= ruleJvmTypeReference ) )
              // InternalSARL.g:7340:4: (lv_parameterType_6_0= ruleJvmTypeReference )
              {
              // InternalSARL.g:7340:4: (lv_parameterType_6_0= ruleJvmTypeReference )
              // InternalSARL.g:7341:5: lv_parameterType_6_0= ruleJvmTypeReference
              {
              if ( state.backtracking==0 ) {
  
                					newCompositeNode(grammarAccess.getParameterAccess().getParameterTypeJvmTypeReferenceParserRuleCall_5_0());
                				
              }
              pushFollow(FOLLOW_71);
              lv_parameterType_6_0=ruleJvmTypeReference();
  
              state._fsp--;
              if (state.failed) return current;
              if ( state.backtracking==0 ) {
  
                					if (current==null) {
                						current = createModelElementForParent(grammarAccess.getParameterRule());
                					}
                					set(
                						current,
                						"parameterType",
                						lv_parameterType_6_0,
                						"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
                					afterParserOrEnumRuleCall();
                				
              }
  
              }
  
  
              }
  
              // InternalSARL.g:7358:3: ( ( (lv_varArg_7_0= '*' ) ) | (otherlv_8= '=' ( (lv_defaultValue_9_0= ruleXExpression ) ) ) )?
              int alt214=3;
              int LA214_0 = input.LA(1);
  
              if ( (LA214_0==59) ) {
                  alt214=1;
              }
              else if ( (LA214_0==47) ) {
                  alt214=2;
              }
              switch (alt214) {
                  case 1 :
                      // InternalSARL.g:7359:4: ( (lv_varArg_7_0= '*' ) )
                      {
                      // InternalSARL.g:7359:4: ( (lv_varArg_7_0= '*' ) )
                      // InternalSARL.g:7360:5: (lv_varArg_7_0= '*' )
                      {
                      // InternalSARL.g:7360:5: (lv_varArg_7_0= '*' )
                      // InternalSARL.g:7361:6: lv_varArg_7_0= '*'
                      {
                      lv_varArg_7_0=(Token)match(input,59,FOLLOW_2); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        						newLeafNode(lv_varArg_7_0, grammarAccess.getParameterAccess().getVarArgAsteriskKeyword_6_0_0());
                        					
                      }
                      if ( state.backtracking==0 ) {
  
                        						if (current==null) {
                        							current = createModelElement(grammarAccess.getParameterRule());
                        						}
                        						setWithLastConsumed(current, "varArg", true, "*");
                        					
                      }
  
                      }
  
  
                      }
  
  
                      }
                      break;
                  case 2 :
                      // InternalSARL.g:7374:4: (otherlv_8= '=' ( (lv_defaultValue_9_0= ruleXExpression ) ) )
                      {
                      // InternalSARL.g:7374:4: (otherlv_8= '=' ( (lv_defaultValue_9_0= ruleXExpression ) ) )
                      // InternalSARL.g:7375:5: otherlv_8= '=' ( (lv_defaultValue_9_0= ruleXExpression ) )
                      {
                      otherlv_8=(Token)match(input,47,FOLLOW_45); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        					newLeafNode(otherlv_8, grammarAccess.getParameterAccess().getEqualsSignKeyword_6_1_0());
                        				
                      }
                      // InternalSARL.g:7379:5: ( (lv_defaultValue_9_0= ruleXExpression ) )
                      // InternalSARL.g:7380:6: (lv_defaultValue_9_0= ruleXExpression )
                      {
                      // InternalSARL.g:7380:6: (lv_defaultValue_9_0= ruleXExpression )
                      // InternalSARL.g:7381:7: lv_defaultValue_9_0= ruleXExpression
                      {
                      if ( state.backtracking==0 ) {
  
                        							newCompositeNode(grammarAccess.getParameterAccess().getDefaultValueXExpressionParserRuleCall_6_1_1_0());
                        						
                      }
                      pushFollow(FOLLOW_2);
                      lv_defaultValue_9_0=ruleXExpression();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        							if (current==null) {
                        								current = createModelElementForParent(grammarAccess.getParameterRule());
                        							}
                        							set(
                        								current,
                        								"defaultValue",
                        								lv_defaultValue_9_0,
                        								"org.eclipse.xtext.xbase.Xbase.XExpression");
                        							afterParserOrEnumRuleCall();
                        						
                      }
  
                      }
  
  
                      }
  
  
                      }
  
  
                      }
                      break;
  
              }
  
  
              }
  
  
              }
  
              if ( state.backtracking==0 ) {
  
                	leaveRule();
  
              }
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }