docs: public final void selector() throws RecognitionException {
  		Token DOT21=null;
  		Token DOT22=null;
  		Token DOT23=null;
  		Token ID24=null;
  		Token LEFT_SQUARE25=null;
  		Token RIGHT_SQUARE26=null;
  
  		try {
  			// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:652:5: ( ( DOT super_key )=> DOT super_key superSuffix | ( DOT new_key )=> DOT new_key ( nonWildcardTypeArguments )? innerCreator | ( DOT ID )=> DOT ID ( ( LEFT_PAREN )=> arguments )? | ( LEFT_SQUARE )=> LEFT_SQUARE expression RIGHT_SQUARE )
  			int alt83=4;
  			int LA83_0 = input.LA(1);
  			if ( (LA83_0==DOT) ) {
  				int LA83_1 = input.LA(2);
  				if ( (synpred36_DRL5Expressions()) ) {
  					alt83=1;
  				}
  				else if ( (synpred37_DRL5Expressions()) ) {
  					alt83=2;
  				}
  				else if ( (synpred38_DRL5Expressions()) ) {
  					alt83=3;
  				}
  
  				else {
  					if (state.backtracking>0) {state.failed=true; return;}
  					int nvaeMark = input.mark();
  					try {
  						input.consume();
  						NoViableAltException nvae =
  							new NoViableAltException("", 83, 1, input);
  						throw nvae;
  					} finally {
  						input.rewind(nvaeMark);
  					}
  				}
  
  			}
  			else if ( (LA83_0==LEFT_SQUARE) && (synpred40_DRL5Expressions())) {
  				alt83=4;
  			}
  
  			switch (alt83) {
  				case 1 :
  					// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:652:9: ( DOT super_key )=> DOT super_key superSuffix
  					{
  					DOT21=(Token)match(input,DOT,FOLLOW_DOT_in_selector3804); if (state.failed) return;
  					if ( state.backtracking==0 ) { helper.emit(DOT21, DroolsEditorType.SYMBOL); }
  					pushFollow(FOLLOW_super_key_in_selector3808);
  					super_key();
  					state._fsp--;
  					if (state.failed) return;
  					pushFollow(FOLLOW_superSuffix_in_selector3810);
  					superSuffix();
  					state._fsp--;
  					if (state.failed) return;
  					}
  					break;
  				case 2 :
  					// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:653:9: ( DOT new_key )=> DOT new_key ( nonWildcardTypeArguments )? innerCreator
  					{
  					DOT22=(Token)match(input,DOT,FOLLOW_DOT_in_selector3826); if (state.failed) return;
  					if ( state.backtracking==0 ) { helper.emit(DOT22, DroolsEditorType.SYMBOL); }
  					pushFollow(FOLLOW_new_key_in_selector3830);
  					new_key();
  					state._fsp--;
  					if (state.failed) return;
  					// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:653:84: ( nonWildcardTypeArguments )?
  					int alt81=2;
  					int LA81_0 = input.LA(1);
  					if ( (LA81_0==LESS) ) {
  						alt81=1;
  					}
  					switch (alt81) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:653:85: nonWildcardTypeArguments
  							{
  							pushFollow(FOLLOW_nonWildcardTypeArguments_in_selector3833);
  							nonWildcardTypeArguments();
  							state._fsp--;
  							if (state.failed) return;
  							}
  							break;
  
  					}
  
  					pushFollow(FOLLOW_innerCreator_in_selector3837);
  					innerCreator();
  					state._fsp--;
  					if (state.failed) return;
  					}
  					break;
  				case 3 :
  					// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:654:9: ( DOT ID )=> DOT ID ( ( LEFT_PAREN )=> arguments )?
  					{
  					DOT23=(Token)match(input,DOT,FOLLOW_DOT_in_selector3853); if (state.failed) return;
  					if ( state.backtracking==0 ) { helper.emit(DOT23, DroolsEditorType.SYMBOL); }
  					ID24=(Token)match(input,ID,FOLLOW_ID_in_selector3875); if (state.failed) return;
  					if ( state.backtracking==0 ) { helper.emit(ID24, DroolsEditorType.IDENTIFIER); }
  					// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:656:19: ( ( LEFT_PAREN )=> arguments )?
  					int alt82=2;
  					int LA82_0 = input.LA(1);
  					if ( (LA82_0==LEFT_PAREN) ) {
  						int LA82_1 = input.LA(2);
  						if ( (synpred39_DRL5Expressions()) ) {
  							alt82=1;
  						}
  					}
  					switch (alt82) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:656:20: ( LEFT_PAREN )=> arguments
  							{
  							pushFollow(FOLLOW_arguments_in_selector3904);
  							arguments();
  							state._fsp--;
  							if (state.failed) return;
  							}
  							break;
  
  					}
  
  					}
  					break;
  				case 4 :
  					// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:658:9: ( LEFT_SQUARE )=> LEFT_SQUARE expression RIGHT_SQUARE
  					{
  					LEFT_SQUARE25=(Token)match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_selector3925); if (state.failed) return;
  					if ( state.backtracking==0 ) { helper.emit(LEFT_SQUARE25, DroolsEditorType.SYMBOL); }
  					pushFollow(FOLLOW_expression_in_selector3952);
  					expression();
  					state._fsp--;
  					if (state.failed) return;
  					RIGHT_SQUARE26=(Token)match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_selector3977); if (state.failed) return;
  					if ( state.backtracking==0 ) { helper.emit(RIGHT_SQUARE26, DroolsEditorType.SYMBOL); }
  					}
  					break;
  
  			}
  		}
  
  		catch (RecognitionException re) {
  		    throw re;
  		}
  
  		finally {
  			// do for sure before leaving
  		}
  	}