docs: public final AntlrDatatypeRuleToken ruleValidID() throws RecognitionException {
          AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
  
          Token this_ID_0=null;
          Token kw=null;
  
  
          	enterRule();
  
          try {
              // InternalSARL.g:9830:2: ( (this_ID_0= RULE_ID | kw= 'create' | kw= 'annotation' | kw= 'AFTER' | kw= 'BEFORE' | kw= 'SEPARATOR' ) )
              // InternalSARL.g:9831:2: (this_ID_0= RULE_ID | kw= 'create' | kw= 'annotation' | kw= 'AFTER' | kw= 'BEFORE' | kw= 'SEPARATOR' )
              {
              // InternalSARL.g:9831:2: (this_ID_0= RULE_ID | kw= 'create' | kw= 'annotation' | kw= 'AFTER' | kw= 'BEFORE' | kw= 'SEPARATOR' )
              int alt255=6;
              switch ( input.LA(1) ) {
              case RULE_ID:
                  {
                  alt255=1;
                  }
                  break;
              case 92:
                  {
                  alt255=2;
                  }
                  break;
              case 44:
                  {
                  alt255=3;
                  }
                  break;
              case 93:
                  {
                  alt255=4;
                  }
                  break;
              case 94:
                  {
                  alt255=5;
                  }
                  break;
              case 95:
                  {
                  alt255=6;
                  }
                  break;
              default:
                  if (state.backtracking>0) {state.failed=true; return current;}
                  NoViableAltException nvae =
                      new NoViableAltException("", 255, 0, input);
  
                  throw nvae;
              }
  
              switch (alt255) {
                  case 1 :
                      // InternalSARL.g:9832:3: this_ID_0= RULE_ID
                      {
                      this_ID_0=(Token)match(input,RULE_ID,FOLLOW_2); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current.merge(this_ID_0);
                        		
                      }
                      if ( state.backtracking==0 ) {
  
                        			newLeafNode(this_ID_0, grammarAccess.getValidIDAccess().getIDTerminalRuleCall_0());
                        		
                      }
  
                      }
                      break;
                  case 2 :
                      // InternalSARL.g:9840:3: kw= 'create'
                      {
                      kw=(Token)match(input,92,FOLLOW_2); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current.merge(kw);
                        			newLeafNode(kw, grammarAccess.getValidIDAccess().getCreateKeyword_1());
                        		
                      }
  
                      }
                      break;
                  case 3 :
                      // InternalSARL.g:9846:3: kw= 'annotation'
                      {
                      kw=(Token)match(input,44,FOLLOW_2); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current.merge(kw);
                        			newLeafNode(kw, grammarAccess.getValidIDAccess().getAnnotationKeyword_2());
                        		
                      }
  
                      }
                      break;
                  case 4 :
                      // InternalSARL.g:9852:3: kw= 'AFTER'
                      {
                      kw=(Token)match(input,93,FOLLOW_2); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current.merge(kw);
                        			newLeafNode(kw, grammarAccess.getValidIDAccess().getAFTERKeyword_3());
                        		
                      }
  
                      }
                      break;
                  case 5 :
                      // InternalSARL.g:9858:3: kw= 'BEFORE'
                      {
                      kw=(Token)match(input,94,FOLLOW_2); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current.merge(kw);
                        			newLeafNode(kw, grammarAccess.getValidIDAccess().getBEFOREKeyword_4());
                        		
                      }
  
                      }
                      break;
                  case 6 :
                      // InternalSARL.g:9864:3: kw= 'SEPARATOR'
                      {
                      kw=(Token)match(input,95,FOLLOW_2); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current.merge(kw);
                        			newLeafNode(kw, grammarAccess.getValidIDAccess().getSEPARATORKeyword_5());
                        		
                      }
  
                      }
                      break;
  
              }
  
  
              }
  
              if ( state.backtracking==0 ) {
  
                	leaveRule();
  
              }
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }