docs: public final AntlrDatatypeRuleToken ruleFunctionID() throws RecognitionException {
          AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
  
          AntlrDatatypeRuleToken this_ValidID_0 = null;
  
          AntlrDatatypeRuleToken this_Operators_1 = null;
  
  
  
          	enterRule();
  
          try {
              // InternalSARL.g:9517:2: ( (this_ValidID_0= ruleValidID | this_Operators_1= ruleOperators ) )
              // InternalSARL.g:9518:2: (this_ValidID_0= ruleValidID | this_Operators_1= ruleOperators )
              {
              // InternalSARL.g:9518:2: (this_ValidID_0= ruleValidID | this_Operators_1= ruleOperators )
              int alt250=2;
              int LA250_0 = input.LA(1);
  
              if ( (LA250_0==RULE_ID||LA250_0==44||(LA250_0>=92 && LA250_0<=95)) ) {
                  alt250=1;
              }
              else if ( ((LA250_0>=40 && LA250_0<=41)||LA250_0==59||(LA250_0>=70 && LA250_0<=71)||(LA250_0>=73 && LA250_0<=76)||(LA250_0>=107 && LA250_0<=118)||(LA250_0>=120 && LA250_0<=126)) ) {
                  alt250=2;
              }
              else {
                  if (state.backtracking>0) {state.failed=true; return current;}
                  NoViableAltException nvae =
                      new NoViableAltException("", 250, 0, input);
  
                  throw nvae;
              }
              switch (alt250) {
                  case 1 :
                      // InternalSARL.g:9519:3: this_ValidID_0= ruleValidID
                      {
                      if ( state.backtracking==0 ) {
  
                        			newCompositeNode(grammarAccess.getFunctionIDAccess().getValidIDParserRuleCall_0());
                        		
                      }
                      pushFollow(FOLLOW_2);
                      this_ValidID_0=ruleValidID();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current.merge(this_ValidID_0);
                        		
                      }
                      if ( state.backtracking==0 ) {
  
                        			afterParserOrEnumRuleCall();
                        		
                      }
  
                      }
                      break;
                  case 2 :
                      // InternalSARL.g:9530:3: this_Operators_1= ruleOperators
                      {
                      if ( state.backtracking==0 ) {
  
                        			newCompositeNode(grammarAccess.getFunctionIDAccess().getOperatorsParserRuleCall_1());
                        		
                      }
                      pushFollow(FOLLOW_2);
                      this_Operators_1=ruleOperators();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current.merge(this_Operators_1);
                        		
                      }
                      if ( state.backtracking==0 ) {
  
                        			afterParserOrEnumRuleCall();
                        		
                      }
  
                      }
                      break;
  
              }
  
  
              }
  
              if ( state.backtracking==0 ) {
  
                	leaveRule();
  
              }
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }