docs: public final EObject ruleXClosure() throws RecognitionException {
          EObject current = null;
  
          Token otherlv_1=null;
          Token otherlv_3=null;
          Token lv_explicitSyntax_5_0=null;
          Token otherlv_7=null;
          EObject lv_declaredFormalParameters_2_0 = null;
  
          EObject lv_declaredFormalParameters_4_0 = null;
  
          EObject lv_expression_6_0 = null;
  
  
  
          	enterRule();
  
          try {
              // InternalSARL.g:13953:2: ( ( ( ( ( () '[' ) )=> ( () otherlv_1= '[' ) ) ( ( ( ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> ( ( ( (lv_declaredFormalParameters_2_0= ruleJvmFormalParameter ) ) (otherlv_3= ',' ( (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter ) ) )* )? ( (lv_explicitSyntax_5_0= '|' ) ) ) )? ( (lv_expression_6_0= ruleXExpressionInClosure ) ) otherlv_7= ']' ) )
              // InternalSARL.g:13954:2: ( ( ( ( () '[' ) )=> ( () otherlv_1= '[' ) ) ( ( ( ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> ( ( ( (lv_declaredFormalParameters_2_0= ruleJvmFormalParameter ) ) (otherlv_3= ',' ( (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter ) ) )* )? ( (lv_explicitSyntax_5_0= '|' ) ) ) )? ( (lv_expression_6_0= ruleXExpressionInClosure ) ) otherlv_7= ']' )
              {
              // InternalSARL.g:13954:2: ( ( ( ( () '[' ) )=> ( () otherlv_1= '[' ) ) ( ( ( ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> ( ( ( (lv_declaredFormalParameters_2_0= ruleJvmFormalParameter ) ) (otherlv_3= ',' ( (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter ) ) )* )? ( (lv_explicitSyntax_5_0= '|' ) ) ) )? ( (lv_expression_6_0= ruleXExpressionInClosure ) ) otherlv_7= ']' )
              // InternalSARL.g:13955:3: ( ( ( () '[' ) )=> ( () otherlv_1= '[' ) ) ( ( ( ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> ( ( ( (lv_declaredFormalParameters_2_0= ruleJvmFormalParameter ) ) (otherlv_3= ',' ( (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter ) ) )* )? ( (lv_explicitSyntax_5_0= '|' ) ) ) )? ( (lv_expression_6_0= ruleXExpressionInClosure ) ) otherlv_7= ']'
              {
              // InternalSARL.g:13955:3: ( ( ( () '[' ) )=> ( () otherlv_1= '[' ) )
              // InternalSARL.g:13956:4: ( ( () '[' ) )=> ( () otherlv_1= '[' )
              {
              // InternalSARL.g:13962:4: ( () otherlv_1= '[' )
              // InternalSARL.g:13963:5: () otherlv_1= '['
              {
              // InternalSARL.g:13963:5: ()
              // InternalSARL.g:13964:6: 
              {
              if ( state.backtracking==0 ) {
  
                						current = forceCreateModelElement(
                							grammarAccess.getXClosureAccess().getXClosureAction_0_0_0(),
                							current);
                					
              }
  
              }
  
              otherlv_1=(Token)match(input,55,FOLLOW_133); if (state.failed) return current;
              if ( state.backtracking==0 ) {
  
                					newLeafNode(otherlv_1, grammarAccess.getXClosureAccess().getLeftSquareBracketKeyword_0_0_1());
                				
              }
  
              }
  
  
              }
  
              // InternalSARL.g:13976:3: ( ( ( ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> ( ( ( (lv_declaredFormalParameters_2_0= ruleJvmFormalParameter ) ) (otherlv_3= ',' ( (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter ) ) )* )? ( (lv_explicitSyntax_5_0= '|' ) ) ) )?
              int alt333=2;
              alt333 = dfa333.predict(input);
              switch (alt333) {
                  case 1 :
                      // InternalSARL.g:13977:4: ( ( ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> ( ( ( (lv_declaredFormalParameters_2_0= ruleJvmFormalParameter ) ) (otherlv_3= ',' ( (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter ) ) )* )? ( (lv_explicitSyntax_5_0= '|' ) ) )
                      {
                      // InternalSARL.g:14000:4: ( ( ( (lv_declaredFormalParameters_2_0= ruleJvmFormalParameter ) ) (otherlv_3= ',' ( (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter ) ) )* )? ( (lv_explicitSyntax_5_0= '|' ) ) )
                      // InternalSARL.g:14001:5: ( ( (lv_declaredFormalParameters_2_0= ruleJvmFormalParameter ) ) (otherlv_3= ',' ( (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter ) ) )* )? ( (lv_explicitSyntax_5_0= '|' ) )
                      {
                      // InternalSARL.g:14001:5: ( ( (lv_declaredFormalParameters_2_0= ruleJvmFormalParameter ) ) (otherlv_3= ',' ( (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter ) ) )* )?
                      int alt332=2;
                      int LA332_0 = input.LA(1);
  
                      if ( (LA332_0==RULE_ID||(LA332_0>=44 && LA332_0<=45)||(LA332_0>=92 && LA332_0<=95)) ) {
                          alt332=1;
                      }
                      switch (alt332) {
                          case 1 :
                              // InternalSARL.g:14002:6: ( (lv_declaredFormalParameters_2_0= ruleJvmFormalParameter ) ) (otherlv_3= ',' ( (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter ) ) )*
                              {
                              // InternalSARL.g:14002:6: ( (lv_declaredFormalParameters_2_0= ruleJvmFormalParameter ) )
                              // InternalSARL.g:14003:7: (lv_declaredFormalParameters_2_0= ruleJvmFormalParameter )
                              {
                              // InternalSARL.g:14003:7: (lv_declaredFormalParameters_2_0= ruleJvmFormalParameter )
                              // InternalSARL.g:14004:8: lv_declaredFormalParameters_2_0= ruleJvmFormalParameter
                              {
                              if ( state.backtracking==0 ) {
  
                                								newCompositeNode(grammarAccess.getXClosureAccess().getDeclaredFormalParametersJvmFormalParameterParserRuleCall_1_0_0_0_0());
                                							
                              }
                              pushFollow(FOLLOW_134);
                              lv_declaredFormalParameters_2_0=ruleJvmFormalParameter();
  
                              state._fsp--;
                              if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                								if (current==null) {
                                									current = createModelElementForParent(grammarAccess.getXClosureRule());
                                								}
                                								add(
                                									current,
                                									"declaredFormalParameters",
                                									lv_declaredFormalParameters_2_0,
                                									"io.sarl.lang.SARL.JvmFormalParameter");
                                								afterParserOrEnumRuleCall();
                                							
                              }
  
                              }
  
  
                              }
  
                              // InternalSARL.g:14021:6: (otherlv_3= ',' ( (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter ) ) )*
                              loop331:
                              do {
                                  int alt331=2;
                                  int LA331_0 = input.LA(1);
  
                                  if ( (LA331_0==32) ) {
                                      alt331=1;
                                  }
  
  
                                  switch (alt331) {
                              	case 1 :
                              	    // InternalSARL.g:14022:7: otherlv_3= ',' ( (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter ) )
                              	    {
                              	    otherlv_3=(Token)match(input,32,FOLLOW_75); if (state.failed) return current;
                              	    if ( state.backtracking==0 ) {
  
                              	      							newLeafNode(otherlv_3, grammarAccess.getXClosureAccess().getCommaKeyword_1_0_0_1_0());
                              	      						
                              	    }
                              	    // InternalSARL.g:14026:7: ( (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter ) )
                              	    // InternalSARL.g:14027:8: (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter )
                              	    {
                              	    // InternalSARL.g:14027:8: (lv_declaredFormalParameters_4_0= ruleJvmFormalParameter )
                              	    // InternalSARL.g:14028:9: lv_declaredFormalParameters_4_0= ruleJvmFormalParameter
                              	    {
                              	    if ( state.backtracking==0 ) {
  
                              	      									newCompositeNode(grammarAccess.getXClosureAccess().getDeclaredFormalParametersJvmFormalParameterParserRuleCall_1_0_0_1_1_0());
                              	      								
                              	    }
                              	    pushFollow(FOLLOW_134);
                              	    lv_declaredFormalParameters_4_0=ruleJvmFormalParameter();
  
                              	    state._fsp--;
                              	    if (state.failed) return current;
                              	    if ( state.backtracking==0 ) {
  
                              	      									if (current==null) {
                              	      										current = createModelElementForParent(grammarAccess.getXClosureRule());
                              	      									}
                              	      									add(
                              	      										current,
                              	      										"declaredFormalParameters",
                              	      										lv_declaredFormalParameters_4_0,
                              	      										"io.sarl.lang.SARL.JvmFormalParameter");
                              	      									afterParserOrEnumRuleCall();
                              	      								
                              	    }
  
                              	    }
  
  
                              	    }
  
  
                              	    }
                              	    break;
  
                              	default :
                              	    break loop331;
                                  }
                              } while (true);
  
  
                              }
                              break;
  
                      }
  
                      // InternalSARL.g:14047:5: ( (lv_explicitSyntax_5_0= '|' ) )
                      // InternalSARL.g:14048:6: (lv_explicitSyntax_5_0= '|' )
                      {
                      // InternalSARL.g:14048:6: (lv_explicitSyntax_5_0= '|' )
                      // InternalSARL.g:14049:7: lv_explicitSyntax_5_0= '|'
                      {
                      lv_explicitSyntax_5_0=(Token)match(input,97,FOLLOW_135); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        							newLeafNode(lv_explicitSyntax_5_0, grammarAccess.getXClosureAccess().getExplicitSyntaxVerticalLineKeyword_1_0_1_0());
                        						
                      }
                      if ( state.backtracking==0 ) {
  
                        							if (current==null) {
                        								current = createModelElement(grammarAccess.getXClosureRule());
                        							}
                        							setWithLastConsumed(current, "explicitSyntax", true, "|");
                        						
                      }
  
                      }
  
  
                      }
  
  
                      }
  
  
                      }
                      break;
  
              }
  
              // InternalSARL.g:14063:3: ( (lv_expression_6_0= ruleXExpressionInClosure ) )
              // InternalSARL.g:14064:4: (lv_expression_6_0= ruleXExpressionInClosure )
              {
              // InternalSARL.g:14064:4: (lv_expression_6_0= ruleXExpressionInClosure )
              // InternalSARL.g:14065:5: lv_expression_6_0= ruleXExpressionInClosure
              {
              if ( state.backtracking==0 ) {
  
                					newCompositeNode(grammarAccess.getXClosureAccess().getExpressionXExpressionInClosureParserRuleCall_2_0());
                				
              }
              pushFollow(FOLLOW_63);
              lv_expression_6_0=ruleXExpressionInClosure();
  
              state._fsp--;
              if (state.failed) return current;
              if ( state.backtracking==0 ) {
  
                					if (current==null) {
                						current = createModelElementForParent(grammarAccess.getXClosureRule());
                					}
                					set(
                						current,
                						"expression",
                						lv_expression_6_0,
                						"org.eclipse.xtext.xbase.Xbase.XExpressionInClosure");
                					afterParserOrEnumRuleCall();
                				
              }
  
              }
  
  
              }
  
              otherlv_7=(Token)match(input,56,FOLLOW_2); if (state.failed) return current;
              if ( state.backtracking==0 ) {
  
                			newLeafNode(otherlv_7, grammarAccess.getXClosureAccess().getRightSquareBracketKeyword_3());
                		
              }
  
              }
  
  
              }
  
              if ( state.backtracking==0 ) {
  
                	leaveRule();
  
              }
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }