docs: public final DRL5Expressions.relationalOp_return relationalOp() throws RecognitionException {
  		DRL5Expressions.relationalOp_return retval = new DRL5Expressions.relationalOp_return();
  		retval.start = input.LT(1);
  
  		Token op=null;
  		String xop =null;
  		ParserRuleReturnScope nop =null;
  		ParserRuleReturnScope cop =null;
  
  		 if ( isNotEOF() ) helper.emit( Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR ); helper.setHasOperator( true ); 
  		try {
  			// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:115:3: ( (op= LESS_EQUALS |op= GREATER_EQUALS |op= LESS |op= GREATER |xop= complexOp | not_key nop= neg_operator_key |cop= operator_key ) )
  			// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:115:5: (op= LESS_EQUALS |op= GREATER_EQUALS |op= LESS |op= GREATER |xop= complexOp | not_key nop= neg_operator_key |cop= operator_key )
  			{
  			// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:115:5: (op= LESS_EQUALS |op= GREATER_EQUALS |op= LESS |op= GREATER |xop= complexOp | not_key nop= neg_operator_key |cop= operator_key )
  			int alt4=7;
  			int LA4_0 = input.LA(1);
  			if ( (LA4_0==LESS_EQUALS) ) {
  				alt4=1;
  			}
  			else if ( (LA4_0==GREATER_EQUALS) ) {
  				alt4=2;
  			}
  			else if ( (LA4_0==LESS) ) {
  				alt4=3;
  			}
  			else if ( (LA4_0==GREATER) ) {
  				alt4=4;
  			}
  			else if ( (LA4_0==TILDE) ) {
  				alt4=5;
  			}
  			else if ( (LA4_0==ID) && ((((helper.validateIdentifierKey(DroolsSoftKeywords.NOT)))||((helper.isPluggableEvaluator(false)))))) {
  				int LA4_6 = input.LA(2);
  				if ( (((helper.validateIdentifierKey(DroolsSoftKeywords.NOT)))) ) {
  					alt4=6;
  				}
  				else if ( (((helper.isPluggableEvaluator(false)))) ) {
  					alt4=7;
  				}
  
  				else {
  					if (state.backtracking>0) {state.failed=true; return retval;}
  					int nvaeMark = input.mark();
  					try {
  						input.consume();
  						NoViableAltException nvae =
  							new NoViableAltException("", 4, 6, input);
  						throw nvae;
  					} finally {
  						input.rewind(nvaeMark);
  					}
  				}
  
  			}
  
  			switch (alt4) {
  				case 1 :
  					// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:115:7: op= LESS_EQUALS
  					{
  					op=(Token)match(input,LESS_EQUALS,FOLLOW_LESS_EQUALS_in_relationalOp342); if (state.failed) return retval;
  					if ( state.backtracking==0 ) { retval.negated = false; retval.opr =(op!=null?op.getText():null); retval.params = null; helper.emit(op, DroolsEditorType.SYMBOL);}
  					}
  					break;
  				case 2 :
  					// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:116:7: op= GREATER_EQUALS
  					{
  					op=(Token)match(input,GREATER_EQUALS,FOLLOW_GREATER_EQUALS_in_relationalOp358); if (state.failed) return retval;
  					if ( state.backtracking==0 ) { retval.negated = false; retval.opr =(op!=null?op.getText():null); retval.params = null; helper.emit(op, DroolsEditorType.SYMBOL);}
  					}
  					break;
  				case 3 :
  					// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:117:7: op= LESS
  					{
  					op=(Token)match(input,LESS,FOLLOW_LESS_in_relationalOp371); if (state.failed) return retval;
  					if ( state.backtracking==0 ) { retval.negated = false; retval.opr =(op!=null?op.getText():null); retval.params = null; helper.emit(op, DroolsEditorType.SYMBOL);}
  					}
  					break;
  				case 4 :
  					// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:118:7: op= GREATER
  					{
  					op=(Token)match(input,GREATER,FOLLOW_GREATER_in_relationalOp394); if (state.failed) return retval;
  					if ( state.backtracking==0 ) { retval.negated = false; retval.opr =(op!=null?op.getText():null); retval.params = null; helper.emit(op, DroolsEditorType.SYMBOL);}
  					}
  					break;
  				case 5 :
  					// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:119:7: xop= complexOp
  					{
  					pushFollow(FOLLOW_complexOp_in_relationalOp414);
  					xop=complexOp();
  					state._fsp--;
  					if (state.failed) return retval;
  					if ( state.backtracking==0 ) { retval.negated = false; retval.opr =(op!=null?op.getText():null); retval.params = null; helper.emit(op, DroolsEditorType.SYMBOL);}
  					}
  					break;
  				case 6 :
  					// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:120:7: not_key nop= neg_operator_key
  					{
  					pushFollow(FOLLOW_not_key_in_relationalOp429);
  					not_key();
  					state._fsp--;
  					if (state.failed) return retval;
  					pushFollow(FOLLOW_neg_operator_key_in_relationalOp433);
  					nop=neg_operator_key();
  					state._fsp--;
  					if (state.failed) return retval;
  					if ( state.backtracking==0 ) { retval.negated = true; retval.opr =(nop!=null?input.toString(nop.start,nop.stop):null);}
  					}
  					break;
  				case 7 :
  					// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:121:7: cop= operator_key
  					{
  					pushFollow(FOLLOW_operator_key_in_relationalOp445);
  					cop=operator_key();
  					state._fsp--;
  					if (state.failed) return retval;
  					if ( state.backtracking==0 ) { retval.negated = false; retval.opr =(cop!=null?input.toString(cop.start,cop.stop):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;
  	}