docs: public final AntlrDatatypeRuleToken ruleOpCompare() throws RecognitionException {
          AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
  
          Token kw=null;
  
  
          	enterRule();
  
          try {
              // InternalSARL.g:12767:2: ( (kw= '>=' | (kw= '<' kw= '=' ) | kw= '>' | kw= '<' ) )
              // InternalSARL.g:12768:2: (kw= '>=' | (kw= '<' kw= '=' ) | kw= '>' | kw= '<' )
              {
              // InternalSARL.g:12768:2: (kw= '>=' | (kw= '<' kw= '=' ) | kw= '>' | kw= '<' )
              int alt307=4;
              switch ( input.LA(1) ) {
              case 112:
                  {
                  alt307=1;
                  }
                  break;
              case 40:
                  {
                  int LA307_2 = input.LA(2);
  
                  if ( (LA307_2==EOF||(LA307_2>=RULE_STRING && LA307_2<=RULE_RICH_TEXT_START)||(LA307_2>=RULE_HEX && LA307_2<=RULE_DECIMAL)||(LA307_2>=25 && LA307_2<=26)||(LA307_2>=28 && LA307_2<=30)||LA307_2==36||(LA307_2>=39 && LA307_2<=40)||(LA307_2>=42 && LA307_2<=46)||(LA307_2>=48 && LA307_2<=49)||(LA307_2>=51 && LA307_2<=55)||(LA307_2>=57 && LA307_2<=58)||(LA307_2>=60 && LA307_2<=63)||(LA307_2>=65 && LA307_2<=68)||(LA307_2>=73 && LA307_2<=75)||(LA307_2>=78 && LA307_2<=96)||(LA307_2>=105 && LA307_2<=106)||LA307_2==129||(LA307_2>=131 && LA307_2<=140)) ) {
                      alt307=4;
                  }
                  else if ( (LA307_2==47) ) {
                      alt307=2;
                  }
                  else {
                      if (state.backtracking>0) {state.failed=true; return current;}
                      NoViableAltException nvae =
                          new NoViableAltException("", 307, 2, input);
  
                      throw nvae;
                  }
                  }
                  break;
              case 41:
                  {
                  alt307=3;
                  }
                  break;
              default:
                  if (state.backtracking>0) {state.failed=true; return current;}
                  NoViableAltException nvae =
                      new NoViableAltException("", 307, 0, input);
  
                  throw nvae;
              }
  
              switch (alt307) {
                  case 1 :
                      // InternalSARL.g:12769:3: kw= '>='
                      {
                      kw=(Token)match(input,112,FOLLOW_2); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current.merge(kw);
                        			newLeafNode(kw, grammarAccess.getOpCompareAccess().getGreaterThanSignEqualsSignKeyword_0());
                        		
                      }
  
                      }
                      break;
                  case 2 :
                      // InternalSARL.g:12775:3: (kw= '<' kw= '=' )
                      {
                      // InternalSARL.g:12775:3: (kw= '<' kw= '=' )
                      // InternalSARL.g:12776:4: kw= '<' kw= '='
                      {
                      kw=(Token)match(input,40,FOLLOW_83); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        				current.merge(kw);
                        				newLeafNode(kw, grammarAccess.getOpCompareAccess().getLessThanSignKeyword_1_0());
                        			
                      }
                      kw=(Token)match(input,47,FOLLOW_2); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        				current.merge(kw);
                        				newLeafNode(kw, grammarAccess.getOpCompareAccess().getEqualsSignKeyword_1_1());
                        			
                      }
  
                      }
  
  
                      }
                      break;
                  case 3 :
                      // InternalSARL.g:12788:3: kw= '>'
                      {
                      kw=(Token)match(input,41,FOLLOW_2); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current.merge(kw);
                        			newLeafNode(kw, grammarAccess.getOpCompareAccess().getGreaterThanSignKeyword_2());
                        		
                      }
  
                      }
                      break;
                  case 4 :
                      // InternalSARL.g:12794:3: kw= '<'
                      {
                      kw=(Token)match(input,40,FOLLOW_2); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current.merge(kw);
                        			newLeafNode(kw, grammarAccess.getOpCompareAccess().getLessThanSignKeyword_3());
                        		
                      }
  
                      }
                      break;
  
              }
  
  
              }
  
              if ( state.backtracking==0 ) {
  
                	leaveRule();
  
              }
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }