docs: public final EObject rulePredicatedGroup() throws RecognitionException {
          EObject current = null;
  
          Token lv_predicated_0_0=null;
          Token lv_firstSetPredicated_1_0=null;
          Token otherlv_2=null;
          Token otherlv_4=null;
          EObject lv_elements_3_0 = null;
  
  
  
          	enterRule();
  
          try {
              // InternalXtext.g:2782:2: ( ( ( ( (lv_predicated_0_0= '=>' ) ) | ( (lv_firstSetPredicated_1_0= '->' ) ) ) otherlv_2= '(' ( (lv_elements_3_0= ruleAlternatives ) ) otherlv_4= ')' ) )
              // InternalXtext.g:2783:2: ( ( ( (lv_predicated_0_0= '=>' ) ) | ( (lv_firstSetPredicated_1_0= '->' ) ) ) otherlv_2= '(' ( (lv_elements_3_0= ruleAlternatives ) ) otherlv_4= ')' )
              {
              // InternalXtext.g:2783:2: ( ( ( (lv_predicated_0_0= '=>' ) ) | ( (lv_firstSetPredicated_1_0= '->' ) ) ) otherlv_2= '(' ( (lv_elements_3_0= ruleAlternatives ) ) otherlv_4= ')' )
              // InternalXtext.g:2784:3: ( ( (lv_predicated_0_0= '=>' ) ) | ( (lv_firstSetPredicated_1_0= '->' ) ) ) otherlv_2= '(' ( (lv_elements_3_0= ruleAlternatives ) ) otherlv_4= ')'
              {
              // InternalXtext.g:2784:3: ( ( (lv_predicated_0_0= '=>' ) ) | ( (lv_firstSetPredicated_1_0= '->' ) ) )
              int alt61=2;
              int LA61_0 = input.LA(1);
  
              if ( (LA61_0==42) ) {
                  alt61=1;
              }
              else if ( (LA61_0==43) ) {
                  alt61=2;
              }
              else {
                  NoViableAltException nvae =
                      new NoViableAltException("", 61, 0, input);
  
                  throw nvae;
              }
              switch (alt61) {
                  case 1 :
                      // InternalXtext.g:2785:4: ( (lv_predicated_0_0= '=>' ) )
                      {
                      // InternalXtext.g:2785:4: ( (lv_predicated_0_0= '=>' ) )
                      // InternalXtext.g:2786:5: (lv_predicated_0_0= '=>' )
                      {
                      // InternalXtext.g:2786:5: (lv_predicated_0_0= '=>' )
                      // InternalXtext.g:2787:6: lv_predicated_0_0= '=>'
                      {
                      lv_predicated_0_0=(Token)match(input,42,FollowSets000.FOLLOW_6); 
  
                      						newLeafNode(lv_predicated_0_0, grammarAccess.getPredicatedGroupAccess().getPredicatedEqualsSignGreaterThanSignKeyword_0_0_0());
                      					
  
                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getPredicatedGroupRule());
                      						}
                      						setWithLastConsumed(current, "predicated", true, "=>");
                      					
  
                      }
  
  
                      }
  
  
                      }
                      break;
                  case 2 :
                      // InternalXtext.g:2800:4: ( (lv_firstSetPredicated_1_0= '->' ) )
                      {
                      // InternalXtext.g:2800:4: ( (lv_firstSetPredicated_1_0= '->' ) )
                      // InternalXtext.g:2801:5: (lv_firstSetPredicated_1_0= '->' )
                      {
                      // InternalXtext.g:2801:5: (lv_firstSetPredicated_1_0= '->' )
                      // InternalXtext.g:2802:6: lv_firstSetPredicated_1_0= '->'
                      {
                      lv_firstSetPredicated_1_0=(Token)match(input,43,FollowSets000.FOLLOW_6); 
  
                      						newLeafNode(lv_firstSetPredicated_1_0, grammarAccess.getPredicatedGroupAccess().getFirstSetPredicatedHyphenMinusGreaterThanSignKeyword_0_1_0());
                      					
  
                      						if (current==null) {
                      							current = createModelElement(grammarAccess.getPredicatedGroupRule());
                      						}
                      						setWithLastConsumed(current, "firstSetPredicated", true, "->");
                      					
  
                      }
  
  
                      }
  
  
                      }
                      break;
  
              }
  
              otherlv_2=(Token)match(input,15,FollowSets000.FOLLOW_19); 
  
              			newLeafNode(otherlv_2, grammarAccess.getPredicatedGroupAccess().getLeftParenthesisKeyword_1());
              		
              // InternalXtext.g:2819:3: ( (lv_elements_3_0= ruleAlternatives ) )
              // InternalXtext.g:2820:4: (lv_elements_3_0= ruleAlternatives )
              {
              // InternalXtext.g:2820:4: (lv_elements_3_0= ruleAlternatives )
              // InternalXtext.g:2821:5: lv_elements_3_0= ruleAlternatives
              {
  
              					newCompositeNode(grammarAccess.getPredicatedGroupAccess().getElementsAlternativesParserRuleCall_2_0());
              				
              pushFollow(FollowSets000.FOLLOW_37);
              lv_elements_3_0=ruleAlternatives();
  
              state._fsp--;
  
  
              					if (current==null) {
              						current = createModelElementForParent(grammarAccess.getPredicatedGroupRule());
              					}
              					add(
              						current,
              						"elements",
              						lv_elements_3_0,
              						"org.eclipse.xtext.Xtext.Alternatives");
              					afterParserOrEnumRuleCall();
              				
  
              }
  
  
              }
  
              otherlv_4=(Token)match(input,16,FollowSets000.FOLLOW_2); 
  
              			newLeafNode(otherlv_4, grammarAccess.getPredicatedGroupAccess().getRightParenthesisKeyword_3());
              		
  
              }
  
  
              }
  
  
              	leaveRule();
  
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }