docs: public final EObject ruleAbstractTerminal() throws RecognitionException {
          EObject current = null;
  
          EObject this_Keyword_0 = null;
  
          EObject this_RuleCall_1 = null;
  
          EObject this_ParenthesizedElement_2 = null;
  
          EObject this_PredicatedKeyword_3 = null;
  
          EObject this_PredicatedRuleCall_4 = null;
  
          EObject this_PredicatedGroup_5 = null;
  
  
  
          	enterRule();
  
          try {
              // InternalXtext.g:1461:2: ( (this_Keyword_0= ruleKeyword | this_RuleCall_1= ruleRuleCall | this_ParenthesizedElement_2= ruleParenthesizedElement | this_PredicatedKeyword_3= rulePredicatedKeyword | this_PredicatedRuleCall_4= rulePredicatedRuleCall | this_PredicatedGroup_5= rulePredicatedGroup ) )
              // InternalXtext.g:1462:2: (this_Keyword_0= ruleKeyword | this_RuleCall_1= ruleRuleCall | this_ParenthesizedElement_2= ruleParenthesizedElement | this_PredicatedKeyword_3= rulePredicatedKeyword | this_PredicatedRuleCall_4= rulePredicatedRuleCall | this_PredicatedGroup_5= rulePredicatedGroup )
              {
              // InternalXtext.g:1462:2: (this_Keyword_0= ruleKeyword | this_RuleCall_1= ruleRuleCall | this_ParenthesizedElement_2= ruleParenthesizedElement | this_PredicatedKeyword_3= rulePredicatedKeyword | this_PredicatedRuleCall_4= rulePredicatedRuleCall | this_PredicatedGroup_5= rulePredicatedGroup )
              int alt39=6;
              switch ( input.LA(1) ) {
              case RULE_STRING:
                  {
                  alt39=1;
                  }
                  break;
              case RULE_ID:
              case 39:
              case 40:
                  {
                  alt39=2;
                  }
                  break;
              case 15:
                  {
                  alt39=3;
                  }
                  break;
              case 42:
                  {
                  switch ( input.LA(2) ) {
                  case 15:
                      {
                      alt39=6;
                      }
                      break;
                  case RULE_ID:
                  case 39:
                  case 40:
                      {
                      alt39=5;
                      }
                      break;
                  case RULE_STRING:
                      {
                      alt39=4;
                      }
                      break;
                  default:
                      NoViableAltException nvae =
                          new NoViableAltException("", 39, 4, input);
  
                      throw nvae;
                  }
  
                  }
                  break;
              case 43:
                  {
                  switch ( input.LA(2) ) {
                  case RULE_STRING:
                      {
                      alt39=4;
                      }
                      break;
                  case 15:
                      {
                      alt39=6;
                      }
                      break;
                  case RULE_ID:
                  case 39:
                  case 40:
                      {
                      alt39=5;
                      }
                      break;
                  default:
                      NoViableAltException nvae =
                          new NoViableAltException("", 39, 5, input);
  
                      throw nvae;
                  }
  
                  }
                  break;
              default:
                  NoViableAltException nvae =
                      new NoViableAltException("", 39, 0, input);
  
                  throw nvae;
              }
  
              switch (alt39) {
                  case 1 :
                      // InternalXtext.g:1463:3: this_Keyword_0= ruleKeyword
                      {
  
                      			newCompositeNode(grammarAccess.getAbstractTerminalAccess().getKeywordParserRuleCall_0());
                      		
                      pushFollow(FollowSets000.FOLLOW_2);
                      this_Keyword_0=ruleKeyword();
  
                      state._fsp--;
  
  
                      			current = this_Keyword_0;
                      			afterParserOrEnumRuleCall();
                      		
  
                      }
                      break;
                  case 2 :
                      // InternalXtext.g:1472:3: this_RuleCall_1= ruleRuleCall
                      {
  
                      			newCompositeNode(grammarAccess.getAbstractTerminalAccess().getRuleCallParserRuleCall_1());
                      		
                      pushFollow(FollowSets000.FOLLOW_2);
                      this_RuleCall_1=ruleRuleCall();
  
                      state._fsp--;
  
  
                      			current = this_RuleCall_1;
                      			afterParserOrEnumRuleCall();
                      		
  
                      }
                      break;
                  case 3 :
                      // InternalXtext.g:1481:3: this_ParenthesizedElement_2= ruleParenthesizedElement
                      {
  
                      			newCompositeNode(grammarAccess.getAbstractTerminalAccess().getParenthesizedElementParserRuleCall_2());
                      		
                      pushFollow(FollowSets000.FOLLOW_2);
                      this_ParenthesizedElement_2=ruleParenthesizedElement();
  
                      state._fsp--;
  
  
                      			current = this_ParenthesizedElement_2;
                      			afterParserOrEnumRuleCall();
                      		
  
                      }
                      break;
                  case 4 :
                      // InternalXtext.g:1490:3: this_PredicatedKeyword_3= rulePredicatedKeyword
                      {
  
                      			newCompositeNode(grammarAccess.getAbstractTerminalAccess().getPredicatedKeywordParserRuleCall_3());
                      		
                      pushFollow(FollowSets000.FOLLOW_2);
                      this_PredicatedKeyword_3=rulePredicatedKeyword();
  
                      state._fsp--;
  
  
                      			current = this_PredicatedKeyword_3;
                      			afterParserOrEnumRuleCall();
                      		
  
                      }
                      break;
                  case 5 :
                      // InternalXtext.g:1499:3: this_PredicatedRuleCall_4= rulePredicatedRuleCall
                      {
  
                      			newCompositeNode(grammarAccess.getAbstractTerminalAccess().getPredicatedRuleCallParserRuleCall_4());
                      		
                      pushFollow(FollowSets000.FOLLOW_2);
                      this_PredicatedRuleCall_4=rulePredicatedRuleCall();
  
                      state._fsp--;
  
  
                      			current = this_PredicatedRuleCall_4;
                      			afterParserOrEnumRuleCall();
                      		
  
                      }
                      break;
                  case 6 :
                      // InternalXtext.g:1508:3: this_PredicatedGroup_5= rulePredicatedGroup
                      {
  
                      			newCompositeNode(grammarAccess.getAbstractTerminalAccess().getPredicatedGroupParserRuleCall_5());
                      		
                      pushFollow(FollowSets000.FOLLOW_2);
                      this_PredicatedGroup_5=rulePredicatedGroup();
  
                      state._fsp--;
  
  
                      			current = this_PredicatedGroup_5;
                      			afterParserOrEnumRuleCall();
                      		
  
                      }
                      break;
  
              }
  
  
              }
  
  
              	leaveRule();
  
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }