docs: public final DRL5Expressions.operator_return operator() throws RecognitionException {
  		DRL5Expressions.operator_return retval = new DRL5Expressions.operator_return();
  		retval.start = input.LT(1);
  
  		Token x=null;
  		Token op=null;
  		ParserRuleReturnScope rop =null;
  
  		 if ( isNotEOF() ) helper.emit( Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR ); helper.setHasOperator( true ); 
  		try {
  			// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:103:3: ( (x= TILDE )? (op= EQUALS |op= NOT_EQUALS |rop= relationalOp ) )
  			// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:103:5: (x= TILDE )? (op= EQUALS |op= NOT_EQUALS |rop= relationalOp )
  			{
  			// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:103:6: (x= TILDE )?
  			int alt2=2;
  			int LA2_0 = input.LA(1);
  			if ( (LA2_0==TILDE) ) {
  				int LA2_1 = input.LA(2);
  				if ( (LA2_1==EQUALS||(LA2_1 >= GREATER && LA2_1 <= GREATER_EQUALS)||LA2_1==ID||(LA2_1 >= LESS && LA2_1 <= LESS_EQUALS)||LA2_1==NOT_EQUALS||LA2_1==TILDE) ) {
  					alt2=1;
  				}
  			}
  			switch (alt2) {
  				case 1 :
  					// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:103:6: x= TILDE
  					{
  					x=(Token)match(input,TILDE,FOLLOW_TILDE_in_operator256); if (state.failed) return retval;
  					}
  					break;
  
  			}
  
  			// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:104:5: (op= EQUALS |op= NOT_EQUALS |rop= relationalOp )
  			int alt3=3;
  			int LA3_0 = input.LA(1);
  			if ( (LA3_0==EQUALS) ) {
  				alt3=1;
  			}
  			else if ( (LA3_0==NOT_EQUALS) ) {
  				alt3=2;
  			}
  			else if ( ((LA3_0 >= GREATER && LA3_0 <= GREATER_EQUALS)||(LA3_0 >= LESS && LA3_0 <= LESS_EQUALS)||LA3_0==TILDE) ) {
  				alt3=3;
  			}
  			else if ( (LA3_0==ID) && ((((helper.validateIdentifierKey(DroolsSoftKeywords.NOT)))||((helper.isPluggableEvaluator(false)))))) {
  				alt3=3;
  			}
  
  			switch (alt3) {
  				case 1 :
  					// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:104:7: op= EQUALS
  					{
  					op=(Token)match(input,EQUALS,FOLLOW_EQUALS_in_operator267); if (state.failed) return retval;
  					if ( state.backtracking==0 ) { retval.negated = false; retval.opr =(x != null ? (x!=null?x.getText():null) : "")+(op!=null?op.getText():null); helper.emit(op, DroolsEditorType.SYMBOL); }
  					}
  					break;
  				case 2 :
  					// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:105:7: op= NOT_EQUALS
  					{
  					op=(Token)match(input,NOT_EQUALS,FOLLOW_NOT_EQUALS_in_operator286); if (state.failed) return retval;
  					if ( state.backtracking==0 ) { retval.negated = false; retval.opr =(x != null ? (x!=null?x.getText():null) : "")+(op!=null?op.getText():null); helper.emit(op, DroolsEditorType.SYMBOL); }
  					}
  					break;
  				case 3 :
  					// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:106:7: rop= relationalOp
  					{
  					pushFollow(FOLLOW_relationalOp_in_operator301);
  					rop=relationalOp();
  					state._fsp--;
  					if (state.failed) return retval;
  					if ( state.backtracking==0 ) { retval.negated = (rop!=null?((DRL5Expressions.relationalOp_return)rop).negated:false); retval.opr =(x != null ? (x!=null?x.getText():null) : "")+(rop!=null?((DRL5Expressions.relationalOp_return)rop).opr:null); }
  					}
  					break;
  
  			}
  
  			}
  
  			retval.stop = input.LT(-1);
  
  			if ( state.backtracking==0 ) { if( state.backtracking == 0 && input.LA( 1 ) != DRL5Lexer.EOF) { helper.emit( Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT ); } }
  		}
  
  		catch (RecognitionException re) {
  		    throw re;
  		}
  
  		finally {
  			// do for sure before leaving
  		}
  		return retval;
  	}