docs: public final BaseDescr singleRestriction() throws RecognitionException {
  		BaseDescr result = null;
  
  
  		ParserRuleReturnScope op =null;
  		java.util.List<String> sa =null;
  		ParserRuleReturnScope value =null;
  		BaseDescr or =null;
  
  		try {
  			// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:436:3: (op= operator ( ( squareArguments shiftExpression )=>sa= squareArguments value= shiftExpression |value= shiftExpression ) | LEFT_PAREN or= orRestriction RIGHT_PAREN )
  			int alt44=2;
  			int LA44_0 = input.LA(1);
  			if ( (LA44_0==EQUALS||(LA44_0 >= GREATER && LA44_0 <= GREATER_EQUALS)||(LA44_0 >= LESS && LA44_0 <= LESS_EQUALS)||LA44_0==NOT_EQUALS||LA44_0==TILDE) ) {
  				alt44=1;
  			}
  			else if ( (LA44_0==ID) && ((((helper.validateIdentifierKey(DroolsSoftKeywords.NOT)))||((helper.isPluggableEvaluator(false)))))) {
  				alt44=1;
  			}
  			else if ( (LA44_0==LEFT_PAREN) ) {
  				alt44=2;
  			}
  
  			else {
  				if (state.backtracking>0) {state.failed=true; return result;}
  				NoViableAltException nvae =
  					new NoViableAltException("", 44, 0, input);
  				throw nvae;
  			}
  
  			switch (alt44) {
  				case 1 :
  					// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:436:6: op= operator ( ( squareArguments shiftExpression )=>sa= squareArguments value= shiftExpression |value= shiftExpression )
  					{
  					pushFollow(FOLLOW_operator_in_singleRestriction2045);
  					op=operator();
  					state._fsp--;
  					if (state.failed) return result;
  					if ( state.backtracking==0 ) { helper.emit( Location.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT ); }
  					// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:438:6: ( ( squareArguments shiftExpression )=>sa= squareArguments value= shiftExpression |value= shiftExpression )
  					int alt43=2;
  					int LA43_0 = input.LA(1);
  					if ( (LA43_0==LEFT_SQUARE) ) {
  						int LA43_1 = input.LA(2);
  						if ( (synpred12_DRL6Expressions()) ) {
  							alt43=1;
  						}
  						else if ( (true) ) {
  							alt43=2;
  						}
  
  					}
  					else if ( (LA43_0==BOOL||(LA43_0 >= DECIMAL && LA43_0 <= DIV)||LA43_0==DOT||LA43_0==FLOAT||LA43_0==HEX||(LA43_0 >= ID && LA43_0 <= INCR)||LA43_0==LEFT_PAREN||LA43_0==LESS||LA43_0==MINUS||LA43_0==NEGATION||LA43_0==NULL||LA43_0==PLUS||LA43_0==QUESTION_DIV||(LA43_0 >= STAR && LA43_0 <= TIME_INTERVAL)) ) {
  						alt43=2;
  					}
  
  					else {
  						if (state.backtracking>0) {state.failed=true; return result;}
  						NoViableAltException nvae =
  							new NoViableAltException("", 43, 0, input);
  						throw nvae;
  					}
  
  					switch (alt43) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:438:8: ( squareArguments shiftExpression )=>sa= squareArguments value= shiftExpression
  							{
  							pushFollow(FOLLOW_squareArguments_in_singleRestriction2074);
  							sa=squareArguments();
  							state._fsp--;
  							if (state.failed) return result;
  							pushFollow(FOLLOW_shiftExpression_in_singleRestriction2078);
  							value=shiftExpression();
  							state._fsp--;
  							if (state.failed) return result;
  							}
  							break;
  						case 2 :
  							// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:439:10: value= shiftExpression
  							{
  							pushFollow(FOLLOW_shiftExpression_in_singleRestriction2091);
  							value=shiftExpression();
  							state._fsp--;
  							if (state.failed) return result;
  							}
  							break;
  
  					}
  
  					if ( state.backtracking==0 ) { if( buildDescr  ) {
  					               BaseDescr descr = ( (value!=null?((DRL6Expressions.shiftExpression_return)value).result:null) != null &&
  					                                 ( (!((value!=null?((DRL6Expressions.shiftExpression_return)value).result:null) instanceof AtomicExprDescr)) ||
  					                                   ((value!=null?input.toString(value.start,value.stop):null).equals(((AtomicExprDescr)(value!=null?((DRL6Expressions.shiftExpression_return)value).result:null)).getExpression())) )) ?
  							                    (value!=null?((DRL6Expressions.shiftExpression_return)value).result:null) :
  							                    new AtomicExprDescr( (value!=null?input.toString(value.start,value.stop):null) ) ;
  					               result = new RelationalExprDescr( (op!=null?((DRL6Expressions.operator_return)op).opr:null), (op!=null?((DRL6Expressions.operator_return)op).negated:false), sa, relationalExpression_stack.peek().lsd, descr );
  						       if( relationalExpression_stack.peek().lsd instanceof BindingDescr ) {
  						           relationalExpression_stack.peek().lsd = new AtomicExprDescr( ((BindingDescr)relationalExpression_stack.peek().lsd).getExpression() );
  						       }
  					           }
  					           helper.emit( Location.LOCATION_LHS_INSIDE_CONDITION_END );
  					         }
  					}
  					break;
  				case 2 :
  					// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:454:6: LEFT_PAREN or= orRestriction RIGHT_PAREN
  					{
  					match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_singleRestriction2116); if (state.failed) return result;
  					pushFollow(FOLLOW_orRestriction_in_singleRestriction2120);
  					or=orRestriction();
  					state._fsp--;
  					if (state.failed) return result;
  					match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_singleRestriction2122); if (state.failed) return result;
  					if ( state.backtracking==0 ) { result = or; }
  					}
  					break;
  
  			}
  		}
  
  		catch (RecognitionException re) {
  		    throw re;
  		}
  
  		finally {
  			// do for sure before leaving
  		}
  		return result;
  	}