docs: public final BaseDescr primary() throws RecognitionException {
  		BaseDescr result = null;
  
  
  		Token i1=null;
  		Token d=null;
  		Token i2=null;
  		Token h=null;
  		Token n=null;
  		Token LEFT_PAREN12=null;
  		Token COMMA13=null;
  		Token RIGHT_PAREN14=null;
  		BaseDescr expr =null;
  		ParserRuleReturnScope literal11 =null;
  
  		try {
  			// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:579:5: ( ( LEFT_PAREN )=>expr= parExpression | ( nonWildcardTypeArguments )=> nonWildcardTypeArguments ( explicitGenericInvocationSuffix | this_key arguments ) | ( literal )=> literal | ( super_key )=> super_key superSuffix | ( new_key )=> new_key creator | ( primitiveType )=> primitiveType ( LEFT_SQUARE RIGHT_SQUARE )* DOT class_key | ( inlineMapExpression )=> inlineMapExpression | ( inlineListExpression )=> inlineListExpression | ( ID )=>i1= ID ( ( ( DOT ID )=>d= DOT i2= ID ) | ( ( ( DOT | NULL_SAFE_DOT ) LEFT_PAREN )=>d= ( DOT | NULL_SAFE_DOT ) LEFT_PAREN expression ( COMMA expression )* RIGHT_PAREN ) | ( ( HASH ID )=>h= HASH i2= ID ) | ( ( NULL_SAFE_DOT ID )=>n= NULL_SAFE_DOT i2= ID ) )* ( ( identifierSuffix )=> identifierSuffix )? )
  			int alt68=9;
  			int LA68_0 = input.LA(1);
  			if ( (LA68_0==LEFT_PAREN) && (synpred24_DRL6Expressions())) {
  				alt68=1;
  			}
  			else if ( (LA68_0==LESS) && (synpred25_DRL6Expressions())) {
  				alt68=2;
  			}
  			else if ( (LA68_0==STRING) && (synpred26_DRL6Expressions())) {
  				alt68=3;
  			}
  			else if ( (LA68_0==DECIMAL) && (synpred26_DRL6Expressions())) {
  				alt68=3;
  			}
  			else if ( (LA68_0==HEX) && (synpred26_DRL6Expressions())) {
  				alt68=3;
  			}
  			else if ( (LA68_0==FLOAT) && (synpred26_DRL6Expressions())) {
  				alt68=3;
  			}
  			else if ( (LA68_0==BOOL) && (synpred26_DRL6Expressions())) {
  				alt68=3;
  			}
  			else if ( (LA68_0==NULL) && (synpred26_DRL6Expressions())) {
  				alt68=3;
  			}
  			else if ( (LA68_0==TIME_INTERVAL) && (synpred26_DRL6Expressions())) {
  				alt68=3;
  			}
  			else if ( (LA68_0==STAR) && (synpred26_DRL6Expressions())) {
  				alt68=3;
  			}
  			else if ( (LA68_0==ID) ) {
  				int LA68_11 = input.LA(2);
  				if ( ((synpred27_DRL6Expressions()&&((helper.validateIdentifierKey(DroolsSoftKeywords.SUPER))))) ) {
  					alt68=4;
  				}
  				else if ( ((((helper.validateIdentifierKey(DroolsSoftKeywords.NEW)))&&synpred28_DRL6Expressions())) ) {
  					alt68=5;
  				}
  				else if ( ((synpred29_DRL6Expressions()&&(((helper.validateIdentifierKey(DroolsSoftKeywords.SHORT)))||((helper.validateIdentifierKey(DroolsSoftKeywords.LONG)))||((helper.validateIdentifierKey(DroolsSoftKeywords.CHAR)))||((helper.validateIdentifierKey(DroolsSoftKeywords.INT)))||((helper.validateIdentifierKey(DroolsSoftKeywords.FLOAT)))||((helper.validateIdentifierKey(DroolsSoftKeywords.BOOLEAN)))||((helper.validateIdentifierKey(DroolsSoftKeywords.DOUBLE)))||((helper.validateIdentifierKey(DroolsSoftKeywords.BYTE)))))) ) {
  					alt68=6;
  				}
  				else if ( (synpred32_DRL6Expressions()) ) {
  					alt68=9;
  				}
  
  				else {
  					if (state.backtracking>0) {state.failed=true; return result;}
  					int nvaeMark = input.mark();
  					try {
  						input.consume();
  						NoViableAltException nvae =
  							new NoViableAltException("", 68, 11, input);
  						throw nvae;
  					} finally {
  						input.rewind(nvaeMark);
  					}
  				}
  
  			}
  			else if ( (LA68_0==LEFT_SQUARE) ) {
  				int LA68_12 = input.LA(2);
  				if ( (synpred30_DRL6Expressions()) ) {
  					alt68=7;
  				}
  				else if ( (synpred31_DRL6Expressions()) ) {
  					alt68=8;
  				}
  
  				else {
  					if (state.backtracking>0) {state.failed=true; return result;}
  					int nvaeMark = input.mark();
  					try {
  						input.consume();
  						NoViableAltException nvae =
  							new NoViableAltException("", 68, 12, input);
  						throw nvae;
  					} finally {
  						input.rewind(nvaeMark);
  					}
  				}
  
  			}
  
  			else {
  				if (state.backtracking>0) {state.failed=true; return result;}
  				NoViableAltException nvae =
  					new NoViableAltException("", 68, 0, input);
  				throw nvae;
  			}
  
  			switch (alt68) {
  				case 1 :
  					// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:579:7: ( LEFT_PAREN )=>expr= parExpression
  					{
  					pushFollow(FOLLOW_parExpression_in_primary3045);
  					expr=parExpression();
  					state._fsp--;
  					if (state.failed) return result;
  					if ( state.backtracking==0 ) {  if( buildDescr  ) { result = expr; }  }
  					}
  					break;
  				case 2 :
  					// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:580:9: ( nonWildcardTypeArguments )=> nonWildcardTypeArguments ( explicitGenericInvocationSuffix | this_key arguments )
  					{
  					pushFollow(FOLLOW_nonWildcardTypeArguments_in_primary3062);
  					nonWildcardTypeArguments();
  					state._fsp--;
  					if (state.failed) return result;
  					// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:580:63: ( explicitGenericInvocationSuffix | this_key arguments )
  					int alt63=2;
  					int LA63_0 = input.LA(1);
  					if ( (LA63_0==ID) ) {
  						int LA63_1 = input.LA(2);
  						if ( (!((((helper.validateIdentifierKey(DroolsSoftKeywords.THIS)))))) ) {
  							alt63=1;
  						}
  						else if ( (((helper.validateIdentifierKey(DroolsSoftKeywords.THIS)))) ) {
  							alt63=2;
  						}
  
  						else {
  							if (state.backtracking>0) {state.failed=true; return result;}
  							int nvaeMark = input.mark();
  							try {
  								input.consume();
  								NoViableAltException nvae =
  									new NoViableAltException("", 63, 1, input);
  								throw nvae;
  							} finally {
  								input.rewind(nvaeMark);
  							}
  						}
  
  					}
  
  					else {
  						if (state.backtracking>0) {state.failed=true; return result;}
  						NoViableAltException nvae =
  							new NoViableAltException("", 63, 0, input);
  						throw nvae;
  					}
  
  					switch (alt63) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:580:64: explicitGenericInvocationSuffix
  							{
  							pushFollow(FOLLOW_explicitGenericInvocationSuffix_in_primary3065);
  							explicitGenericInvocationSuffix();
  							state._fsp--;
  							if (state.failed) return result;
  							}
  							break;
  						case 2 :
  							// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:580:98: this_key arguments
  							{
  							pushFollow(FOLLOW_this_key_in_primary3069);
  							this_key();
  							state._fsp--;
  							if (state.failed) return result;
  							pushFollow(FOLLOW_arguments_in_primary3071);
  							arguments();
  							state._fsp--;
  							if (state.failed) return result;
  							}
  							break;
  
  					}
  
  					}
  					break;
  				case 3 :
  					// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:581:9: ( literal )=> literal
  					{
  					pushFollow(FOLLOW_literal_in_primary3087);
  					literal11=literal();
  					state._fsp--;
  					if (state.failed) return result;
  					if ( state.backtracking==0 ) { if( buildDescr  ) { result = new AtomicExprDescr( (literal11!=null?input.toString(literal11.start,literal11.stop):null), true ); }  }
  					}
  					break;
  				case 4 :
  					// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:583:9: ( super_key )=> super_key superSuffix
  					{
  					pushFollow(FOLLOW_super_key_in_primary3109);
  					super_key();
  					state._fsp--;
  					if (state.failed) return result;
  					pushFollow(FOLLOW_superSuffix_in_primary3111);
  					superSuffix();
  					state._fsp--;
  					if (state.failed) return result;
  					}
  					break;
  				case 5 :
  					// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:584:9: ( new_key )=> new_key creator
  					{
  					pushFollow(FOLLOW_new_key_in_primary3126);
  					new_key();
  					state._fsp--;
  					if (state.failed) return result;
  					pushFollow(FOLLOW_creator_in_primary3128);
  					creator();
  					state._fsp--;
  					if (state.failed) return result;
  					}
  					break;
  				case 6 :
  					// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:585:9: ( primitiveType )=> primitiveType ( LEFT_SQUARE RIGHT_SQUARE )* DOT class_key
  					{
  					pushFollow(FOLLOW_primitiveType_in_primary3143);
  					primitiveType();
  					state._fsp--;
  					if (state.failed) return result;
  					// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:585:41: ( LEFT_SQUARE RIGHT_SQUARE )*
  					loop64:
  					while (true) {
  						int alt64=2;
  						int LA64_0 = input.LA(1);
  						if ( (LA64_0==LEFT_SQUARE) ) {
  							alt64=1;
  						}
  
  						switch (alt64) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:585:42: LEFT_SQUARE RIGHT_SQUARE
  							{
  							match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_primary3146); if (state.failed) return result;
  							match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_primary3148); if (state.failed) return result;
  							}
  							break;
  
  						default :
  							break loop64;
  						}
  					}
  
  					match(input,DOT,FOLLOW_DOT_in_primary3152); if (state.failed) return result;
  					pushFollow(FOLLOW_class_key_in_primary3154);
  					class_key();
  					state._fsp--;
  					if (state.failed) return result;
  					}
  					break;
  				case 7 :
  					// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:587:9: ( inlineMapExpression )=> inlineMapExpression
  					{
  					pushFollow(FOLLOW_inlineMapExpression_in_primary3174);
  					inlineMapExpression();
  					state._fsp--;
  					if (state.failed) return result;
  					}
  					break;
  				case 8 :
  					// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:588:9: ( inlineListExpression )=> inlineListExpression
  					{
  					pushFollow(FOLLOW_inlineListExpression_in_primary3189);
  					inlineListExpression();
  					state._fsp--;
  					if (state.failed) return result;
  					}
  					break;
  				case 9 :
  					// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:589:9: ( ID )=>i1= ID ( ( ( DOT ID )=>d= DOT i2= ID ) | ( ( ( DOT | NULL_SAFE_DOT ) LEFT_PAREN )=>d= ( DOT | NULL_SAFE_DOT ) LEFT_PAREN expression ( COMMA expression )* RIGHT_PAREN ) | ( ( HASH ID )=>h= HASH i2= ID ) | ( ( NULL_SAFE_DOT ID )=>n= NULL_SAFE_DOT i2= ID ) )* ( ( identifierSuffix )=> identifierSuffix )?
  					{
  					i1=(Token)match(input,ID,FOLLOW_ID_in_primary3205); if (state.failed) return result;
  					if ( state.backtracking==0 ) { helper.emit(i1, DroolsEditorType.IDENTIFIER); }
  					// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:590:9: ( ( ( DOT ID )=>d= DOT i2= ID ) | ( ( ( DOT | NULL_SAFE_DOT ) LEFT_PAREN )=>d= ( DOT | NULL_SAFE_DOT ) LEFT_PAREN expression ( COMMA expression )* RIGHT_PAREN ) | ( ( HASH ID )=>h= HASH i2= ID ) | ( ( NULL_SAFE_DOT ID )=>n= NULL_SAFE_DOT i2= ID ) )*
  					loop66:
  					while (true) {
  						int alt66=5;
  						int LA66_0 = input.LA(1);
  						if ( (LA66_0==DOT) ) {
  							int LA66_2 = input.LA(2);
  							if ( (LA66_2==ID) ) {
  								int LA66_5 = input.LA(3);
  								if ( (synpred33_DRL6Expressions()) ) {
  									alt66=1;
  								}
  
  							}
  							else if ( (LA66_2==LEFT_PAREN) && (synpred34_DRL6Expressions())) {
  								alt66=2;
  							}
  
  						}
  						else if ( (LA66_0==NULL_SAFE_DOT) ) {
  							int LA66_3 = input.LA(2);
  							if ( (LA66_3==LEFT_PAREN) && (synpred34_DRL6Expressions())) {
  								alt66=2;
  							}
  							else if ( (LA66_3==ID) && (synpred36_DRL6Expressions())) {
  								alt66=4;
  							}
  
  						}
  						else if ( (LA66_0==HASH) && (synpred35_DRL6Expressions())) {
  							alt66=3;
  						}
  
  						switch (alt66) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:591:13: ( ( DOT ID )=>d= DOT i2= ID )
  							{
  							// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:591:13: ( ( DOT ID )=>d= DOT i2= ID )
  							// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:591:15: ( DOT ID )=>d= DOT i2= ID
  							{
  							d=(Token)match(input,DOT,FOLLOW_DOT_in_primary3241); if (state.failed) return result;
  							i2=(Token)match(input,ID,FOLLOW_ID_in_primary3245); if (state.failed) return result;
  							if ( state.backtracking==0 ) { helper.emit(d, DroolsEditorType.SYMBOL); helper.emit(i2, DroolsEditorType.IDENTIFIER); }
  							}
  
  							}
  							break;
  						case 2 :
  							// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:593:13: ( ( ( DOT | NULL_SAFE_DOT ) LEFT_PAREN )=>d= ( DOT | NULL_SAFE_DOT ) LEFT_PAREN expression ( COMMA expression )* RIGHT_PAREN )
  							{
  							// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:593:13: ( ( ( DOT | NULL_SAFE_DOT ) LEFT_PAREN )=>d= ( DOT | NULL_SAFE_DOT ) LEFT_PAREN expression ( COMMA expression )* RIGHT_PAREN )
  							// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:593:15: ( ( DOT | NULL_SAFE_DOT ) LEFT_PAREN )=>d= ( DOT | NULL_SAFE_DOT ) LEFT_PAREN expression ( COMMA expression )* RIGHT_PAREN
  							{
  							d=input.LT(1);
  							if ( input.LA(1)==DOT||input.LA(1)==NULL_SAFE_DOT ) {
  								input.consume();
  								state.errorRecovery=false;
  								state.failed=false;
  							}
  							else {
  								if (state.backtracking>0) {state.failed=true; return result;}
  								MismatchedSetException mse = new MismatchedSetException(null,input);
  								throw mse;
  							}
  							LEFT_PAREN12=(Token)match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_primary3297); if (state.failed) return result;
  							if ( state.backtracking==0 ) { helper.emit(d, DroolsEditorType.SYMBOL); helper.emit(LEFT_PAREN12, DroolsEditorType.SYMBOL); }
  							pushFollow(FOLLOW_expression_in_primary3337);
  							expression();
  							state._fsp--;
  							if (state.failed) return result;
  							// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:594:48: ( COMMA expression )*
  							loop65:
  							while (true) {
  								int alt65=2;
  								int LA65_0 = input.LA(1);
  								if ( (LA65_0==COMMA) ) {
  									alt65=1;
  								}
  
  								switch (alt65) {
  								case 1 :
  									// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:594:49: COMMA expression
  									{
  									COMMA13=(Token)match(input,COMMA,FOLLOW_COMMA_in_primary3340); if (state.failed) return result;
  									if ( state.backtracking==0 ) { helper.emit(COMMA13, DroolsEditorType.SYMBOL); }
  									pushFollow(FOLLOW_expression_in_primary3344);
  									expression();
  									state._fsp--;
  									if (state.failed) return result;
  									}
  									break;
  
  								default :
  									break loop65;
  								}
  							}
  
  							RIGHT_PAREN14=(Token)match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_primary3384); if (state.failed) return result;
  							if ( state.backtracking==0 ) { helper.emit(RIGHT_PAREN14, DroolsEditorType.SYMBOL); }
  							}
  
  							}
  							break;
  						case 3 :
  							// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:598:13: ( ( HASH ID )=>h= HASH i2= ID )
  							{
  							// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:598:13: ( ( HASH ID )=>h= HASH i2= ID )
  							// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:598:15: ( HASH ID )=>h= HASH i2= ID
  							{
  							h=(Token)match(input,HASH,FOLLOW_HASH_in_primary3438); if (state.failed) return result;
  							i2=(Token)match(input,ID,FOLLOW_ID_in_primary3442); if (state.failed) return result;
  							if ( state.backtracking==0 ) { helper.emit(h, DroolsEditorType.SYMBOL); helper.emit(i2, DroolsEditorType.IDENTIFIER); }
  							}
  
  							}
  							break;
  						case 4 :
  							// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:600:13: ( ( NULL_SAFE_DOT ID )=>n= NULL_SAFE_DOT i2= ID )
  							{
  							// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:600:13: ( ( NULL_SAFE_DOT ID )=>n= NULL_SAFE_DOT i2= ID )
  							// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:600:15: ( NULL_SAFE_DOT ID )=>n= NULL_SAFE_DOT i2= ID
  							{
  							n=(Token)match(input,NULL_SAFE_DOT,FOLLOW_NULL_SAFE_DOT_in_primary3484); if (state.failed) return result;
  							i2=(Token)match(input,ID,FOLLOW_ID_in_primary3488); if (state.failed) return result;
  							if ( state.backtracking==0 ) { helper.emit(n, DroolsEditorType.SYMBOL); helper.emit(i2, DroolsEditorType.IDENTIFIER); }
  							}
  
  							}
  							break;
  
  						default :
  							break loop66;
  						}
  					}
  
  					// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:601:12: ( ( identifierSuffix )=> identifierSuffix )?
  					int alt67=2;
  					int LA67_0 = input.LA(1);
  					if ( (LA67_0==LEFT_SQUARE) ) {
  						int LA67_1 = input.LA(2);
  						if ( (synpred37_DRL6Expressions()) ) {
  							alt67=1;
  						}
  					}
  					else if ( (LA67_0==LEFT_PAREN) ) {
  						int LA67_2 = input.LA(2);
  						if ( (synpred37_DRL6Expressions()) ) {
  							alt67=1;
  						}
  					}
  					switch (alt67) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/lang/DRL6Expressions.g:601:13: ( identifierSuffix )=> identifierSuffix
  							{
  							pushFollow(FOLLOW_identifierSuffix_in_primary3510);
  							identifierSuffix();
  							state._fsp--;
  							if (state.failed) return result;
  							}
  							break;
  
  					}
  
  					}
  					break;
  
  			}
  		}
  
  		catch (RecognitionException re) {
  		    throw re;
  		}
  
  		finally {
  			// do for sure before leaving
  		}
  		return result;
  	}