docs: public final void typeMatch() throws RecognitionException {
  		try {
  			// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:138:5: ( ( primitiveType )=> ( primitiveType ( ( LEFT_SQUARE RIGHT_SQUARE )=> LEFT_SQUARE RIGHT_SQUARE )* ) | ( ID ( ( typeArguments )=> typeArguments )? ( DOT ID ( ( typeArguments )=> typeArguments )? )* ( ( LEFT_SQUARE RIGHT_SQUARE )=> LEFT_SQUARE RIGHT_SQUARE )* ) )
  			int alt11=2;
  			int LA11_0 = input.LA(1);
  			if ( (LA11_0==ID) ) {
  				int LA11_1 = input.LA(2);
  				if ( (((((helper.validateIdentifierKey(DroolsSoftKeywords.SHORT)))||((helper.validateIdentifierKey(DroolsSoftKeywords.LONG)))||((helper.validateIdentifierKey(DroolsSoftKeywords.BOOLEAN)))||((helper.validateIdentifierKey(DroolsSoftKeywords.BYTE)))||((helper.validateIdentifierKey(DroolsSoftKeywords.FLOAT)))||((helper.validateIdentifierKey(DroolsSoftKeywords.DOUBLE)))||((helper.validateIdentifierKey(DroolsSoftKeywords.INT)))||((helper.validateIdentifierKey(DroolsSoftKeywords.CHAR))))&&synpred1_DRL5Expressions())) ) {
  					alt11=1;
  				}
  				else if ( (true) ) {
  					alt11=2;
  				}
  
  			}
  
  			else {
  				if (state.backtracking>0) {state.failed=true; return;}
  				NoViableAltException nvae =
  					new NoViableAltException("", 11, 0, input);
  				throw nvae;
  			}
  
  			switch (alt11) {
  				case 1 :
  					// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:138:8: ( primitiveType )=> ( primitiveType ( ( LEFT_SQUARE RIGHT_SQUARE )=> LEFT_SQUARE RIGHT_SQUARE )* )
  					{
  					// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:138:27: ( primitiveType ( ( LEFT_SQUARE RIGHT_SQUARE )=> LEFT_SQUARE RIGHT_SQUARE )* )
  					// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:138:29: primitiveType ( ( LEFT_SQUARE RIGHT_SQUARE )=> LEFT_SQUARE RIGHT_SQUARE )*
  					{
  					pushFollow(FOLLOW_primitiveType_in_typeMatch555);
  					primitiveType();
  					state._fsp--;
  					if (state.failed) return;
  					// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:138:43: ( ( LEFT_SQUARE RIGHT_SQUARE )=> LEFT_SQUARE RIGHT_SQUARE )*
  					loop6:
  					while (true) {
  						int alt6=2;
  						int LA6_0 = input.LA(1);
  						if ( (LA6_0==LEFT_SQUARE) && (synpred2_DRL5Expressions())) {
  							alt6=1;
  						}
  
  						switch (alt6) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:138:44: ( LEFT_SQUARE RIGHT_SQUARE )=> LEFT_SQUARE RIGHT_SQUARE
  							{
  							match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_typeMatch565); if (state.failed) return;
  							match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_typeMatch567); if (state.failed) return;
  							}
  							break;
  
  						default :
  							break loop6;
  						}
  					}
  
  					}
  
  					}
  					break;
  				case 2 :
  					// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:139:7: ( ID ( ( typeArguments )=> typeArguments )? ( DOT ID ( ( typeArguments )=> typeArguments )? )* ( ( LEFT_SQUARE RIGHT_SQUARE )=> LEFT_SQUARE RIGHT_SQUARE )* )
  					{
  					// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:139:7: ( ID ( ( typeArguments )=> typeArguments )? ( DOT ID ( ( typeArguments )=> typeArguments )? )* ( ( LEFT_SQUARE RIGHT_SQUARE )=> LEFT_SQUARE RIGHT_SQUARE )* )
  					// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:139:9: ID ( ( typeArguments )=> typeArguments )? ( DOT ID ( ( typeArguments )=> typeArguments )? )* ( ( LEFT_SQUARE RIGHT_SQUARE )=> LEFT_SQUARE RIGHT_SQUARE )*
  					{
  					match(input,ID,FOLLOW_ID_in_typeMatch581); if (state.failed) return;
  					// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:139:12: ( ( typeArguments )=> typeArguments )?
  					int alt7=2;
  					int LA7_0 = input.LA(1);
  					if ( (LA7_0==LESS) ) {
  						int LA7_1 = input.LA(2);
  						if ( (LA7_1==ID) && (synpred3_DRL5Expressions())) {
  							alt7=1;
  						}
  						else if ( (LA7_1==QUESTION) && (synpred3_DRL5Expressions())) {
  							alt7=1;
  						}
  					}
  					switch (alt7) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:139:13: ( typeArguments )=> typeArguments
  							{
  							pushFollow(FOLLOW_typeArguments_in_typeMatch588);
  							typeArguments();
  							state._fsp--;
  							if (state.failed) return;
  							}
  							break;
  
  					}
  
  					// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:139:46: ( DOT ID ( ( typeArguments )=> typeArguments )? )*
  					loop9:
  					while (true) {
  						int alt9=2;
  						int LA9_0 = input.LA(1);
  						if ( (LA9_0==DOT) ) {
  							alt9=1;
  						}
  
  						switch (alt9) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:139:47: DOT ID ( ( typeArguments )=> typeArguments )?
  							{
  							match(input,DOT,FOLLOW_DOT_in_typeMatch593); if (state.failed) return;
  							match(input,ID,FOLLOW_ID_in_typeMatch595); if (state.failed) return;
  							// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:139:54: ( ( typeArguments )=> typeArguments )?
  							int alt8=2;
  							int LA8_0 = input.LA(1);
  							if ( (LA8_0==LESS) ) {
  								int LA8_1 = input.LA(2);
  								if ( (LA8_1==ID) && (synpred4_DRL5Expressions())) {
  									alt8=1;
  								}
  								else if ( (LA8_1==QUESTION) && (synpred4_DRL5Expressions())) {
  									alt8=1;
  								}
  							}
  							switch (alt8) {
  								case 1 :
  									// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:139:55: ( typeArguments )=> typeArguments
  									{
  									pushFollow(FOLLOW_typeArguments_in_typeMatch602);
  									typeArguments();
  									state._fsp--;
  									if (state.failed) return;
  									}
  									break;
  
  							}
  
  							}
  							break;
  
  						default :
  							break loop9;
  						}
  					}
  
  					// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:139:91: ( ( LEFT_SQUARE RIGHT_SQUARE )=> LEFT_SQUARE RIGHT_SQUARE )*
  					loop10:
  					while (true) {
  						int alt10=2;
  						int LA10_0 = input.LA(1);
  						if ( (LA10_0==LEFT_SQUARE) && (synpred5_DRL5Expressions())) {
  							alt10=1;
  						}
  
  						switch (alt10) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:139:92: ( LEFT_SQUARE RIGHT_SQUARE )=> LEFT_SQUARE RIGHT_SQUARE
  							{
  							match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_typeMatch617); if (state.failed) return;
  							match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_typeMatch619); if (state.failed) return;
  							}
  							break;
  
  						default :
  							break loop10;
  						}
  					}
  
  					}
  
  					}
  					break;
  
  			}
  		}
  
  		catch (RecognitionException re) {
  		    throw re;
  		}
  
  		finally {
  			// do for sure before leaving
  		}
  	}