docs: public final AntlrDatatypeRuleToken ruleOpMulti() throws RecognitionException {
          AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
  
          Token kw=null;
  
  
          	enterRule();
  
          try {
              // InternalSARL.g:8843:2: ( (kw= '*' | kw= '/' | kw= '%' ) )
              // InternalSARL.g:8844:2: (kw= '*' | kw= '/' | kw= '%' )
              {
              // InternalSARL.g:8844:2: (kw= '*' | kw= '/' | kw= '%' )
              int alt236=3;
              switch ( input.LA(1) ) {
              case 59:
                  {
                  alt236=1;
                  }
                  break;
              case 70:
                  {
                  alt236=2;
                  }
                  break;
              case 71:
                  {
                  alt236=3;
                  }
                  break;
              default:
                  if (state.backtracking>0) {state.failed=true; return current;}
                  NoViableAltException nvae =
                      new NoViableAltException("", 236, 0, input);
  
                  throw nvae;
              }
  
              switch (alt236) {
                  case 1 :
                      // InternalSARL.g:8845:3: kw= '*'
                      {
                      kw=(Token)match(input,59,FOLLOW_2); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current.merge(kw);
                        			newLeafNode(kw, grammarAccess.getOpMultiAccess().getAsteriskKeyword_0());
                        		
                      }
  
                      }
                      break;
                  case 2 :
                      // InternalSARL.g:8851:3: kw= '/'
                      {
                      kw=(Token)match(input,70,FOLLOW_2); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current.merge(kw);
                        			newLeafNode(kw, grammarAccess.getOpMultiAccess().getSolidusKeyword_1());
                        		
                      }
  
                      }
                      break;
                  case 3 :
                      // InternalSARL.g:8857:3: kw= '%'
                      {
                      kw=(Token)match(input,71,FOLLOW_2); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current.merge(kw);
                        			newLeafNode(kw, grammarAccess.getOpMultiAccess().getPercentSignKeyword_2());
                        		
                      }
  
                      }
                      break;
  
              }
  
  
              }
  
              if ( state.backtracking==0 ) {
  
                	leaveRule();
  
              }
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }