docs: public final AntlrDatatypeRuleToken ruleOpMultiAssign() throws RecognitionException {
          AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
  
          Token kw=null;
  
  
          	enterRule();
  
          try {
              // InternalSARL.g:12210:2: ( (kw= '+=' | kw= '-=' | kw= '*=' | kw= '/=' | kw= '%=' | (kw= '<' kw= '<' kw= '=' ) | (kw= '>' (kw= '>' )? kw= '>=' ) ) )
              // InternalSARL.g:12211:2: (kw= '+=' | kw= '-=' | kw= '*=' | kw= '/=' | kw= '%=' | (kw= '<' kw= '<' kw= '=' ) | (kw= '>' (kw= '>' )? kw= '>=' ) )
              {
              // InternalSARL.g:12211:2: (kw= '+=' | kw= '-=' | kw= '*=' | kw= '/=' | kw= '%=' | (kw= '<' kw= '<' kw= '=' ) | (kw= '>' (kw= '>' )? kw= '>=' ) )
              int alt301=7;
              switch ( input.LA(1) ) {
              case 107:
                  {
                  alt301=1;
                  }
                  break;
              case 108:
                  {
                  alt301=2;
                  }
                  break;
              case 109:
                  {
                  alt301=3;
                  }
                  break;
              case 110:
                  {
                  alt301=4;
                  }
                  break;
              case 111:
                  {
                  alt301=5;
                  }
                  break;
              case 40:
                  {
                  alt301=6;
                  }
                  break;
              case 41:
                  {
                  alt301=7;
                  }
                  break;
              default:
                  if (state.backtracking>0) {state.failed=true; return current;}
                  NoViableAltException nvae =
                      new NoViableAltException("", 301, 0, input);
  
                  throw nvae;
              }
  
              switch (alt301) {
                  case 1 :
                      // InternalSARL.g:12212:3: kw= '+='
                      {
                      kw=(Token)match(input,107,FOLLOW_2); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current.merge(kw);
                        			newLeafNode(kw, grammarAccess.getOpMultiAssignAccess().getPlusSignEqualsSignKeyword_0());
                        		
                      }
  
                      }
                      break;
                  case 2 :
                      // InternalSARL.g:12218:3: kw= '-='
                      {
                      kw=(Token)match(input,108,FOLLOW_2); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current.merge(kw);
                        			newLeafNode(kw, grammarAccess.getOpMultiAssignAccess().getHyphenMinusEqualsSignKeyword_1());
                        		
                      }
  
                      }
                      break;
                  case 3 :
                      // InternalSARL.g:12224:3: kw= '*='
                      {
                      kw=(Token)match(input,109,FOLLOW_2); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current.merge(kw);
                        			newLeafNode(kw, grammarAccess.getOpMultiAssignAccess().getAsteriskEqualsSignKeyword_2());
                        		
                      }
  
                      }
                      break;
                  case 4 :
                      // InternalSARL.g:12230:3: kw= '/='
                      {
                      kw=(Token)match(input,110,FOLLOW_2); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current.merge(kw);
                        			newLeafNode(kw, grammarAccess.getOpMultiAssignAccess().getSolidusEqualsSignKeyword_3());
                        		
                      }
  
                      }
                      break;
                  case 5 :
                      // InternalSARL.g:12236:3: kw= '%='
                      {
                      kw=(Token)match(input,111,FOLLOW_2); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current.merge(kw);
                        			newLeafNode(kw, grammarAccess.getOpMultiAssignAccess().getPercentSignEqualsSignKeyword_4());
                        		
                      }
  
                      }
                      break;
                  case 6 :
                      // InternalSARL.g:12242:3: (kw= '<' kw= '<' kw= '=' )
                      {
                      // InternalSARL.g:12242:3: (kw= '<' kw= '<' kw= '=' )
                      // InternalSARL.g:12243:4: kw= '<' kw= '<' kw= '='
                      {
                      kw=(Token)match(input,40,FOLLOW_91); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        				current.merge(kw);
                        				newLeafNode(kw, grammarAccess.getOpMultiAssignAccess().getLessThanSignKeyword_5_0());
                        			
                      }
                      kw=(Token)match(input,40,FOLLOW_83); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        				current.merge(kw);
                        				newLeafNode(kw, grammarAccess.getOpMultiAssignAccess().getLessThanSignKeyword_5_1());
                        			
                      }
                      kw=(Token)match(input,47,FOLLOW_2); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        				current.merge(kw);
                        				newLeafNode(kw, grammarAccess.getOpMultiAssignAccess().getEqualsSignKeyword_5_2());
                        			
                      }
  
                      }
  
  
                      }
                      break;
                  case 7 :
                      // InternalSARL.g:12260:3: (kw= '>' (kw= '>' )? kw= '>=' )
                      {
                      // InternalSARL.g:12260:3: (kw= '>' (kw= '>' )? kw= '>=' )
                      // InternalSARL.g:12261:4: kw= '>' (kw= '>' )? kw= '>='
                      {
                      kw=(Token)match(input,41,FOLLOW_113); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        				current.merge(kw);
                        				newLeafNode(kw, grammarAccess.getOpMultiAssignAccess().getGreaterThanSignKeyword_6_0());
                        			
                      }
                      // InternalSARL.g:12266:4: (kw= '>' )?
                      int alt300=2;
                      int LA300_0 = input.LA(1);
  
                      if ( (LA300_0==41) ) {
                          alt300=1;
                      }
                      switch (alt300) {
                          case 1 :
                              // InternalSARL.g:12267:5: kw= '>'
                              {
                              kw=(Token)match(input,41,FOLLOW_114); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                					current.merge(kw);
                                					newLeafNode(kw, grammarAccess.getOpMultiAssignAccess().getGreaterThanSignKeyword_6_1());
                                				
                              }
  
                              }
                              break;
  
                      }
  
                      kw=(Token)match(input,112,FOLLOW_2); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        				current.merge(kw);
                        				newLeafNode(kw, grammarAccess.getOpMultiAssignAccess().getGreaterThanSignEqualsSignKeyword_6_2());
                        			
                      }
  
                      }
  
  
                      }
                      break;
  
              }
  
  
              }
  
              if ( state.backtracking==0 ) {
  
                	leaveRule();
  
              }
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }