docs: public final void typeArgument() throws RecognitionException {
  		try {
  			// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:147:5: ( type | QUESTION ( ( extends_key | super_key ) type )? )
  			int alt15=2;
  			int LA15_0 = input.LA(1);
  			if ( (LA15_0==ID) ) {
  				alt15=1;
  			}
  			else if ( (LA15_0==QUESTION) ) {
  				alt15=2;
  			}
  
  			else {
  				if (state.backtracking>0) {state.failed=true; return;}
  				NoViableAltException nvae =
  					new NoViableAltException("", 15, 0, input);
  				throw nvae;
  			}
  
  			switch (alt15) {
  				case 1 :
  					// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:147:7: type
  					{
  					pushFollow(FOLLOW_type_in_typeArgument668);
  					type();
  					state._fsp--;
  					if (state.failed) return;
  					}
  					break;
  				case 2 :
  					// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:148:7: QUESTION ( ( extends_key | super_key ) type )?
  					{
  					match(input,QUESTION,FOLLOW_QUESTION_in_typeArgument676); if (state.failed) return;
  					// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:148:16: ( ( extends_key | super_key ) type )?
  					int alt14=2;
  					int LA14_0 = input.LA(1);
  					if ( (LA14_0==ID) && ((((helper.validateIdentifierKey(DroolsSoftKeywords.SUPER)))||((helper.validateIdentifierKey(DroolsSoftKeywords.EXTENDS)))))) {
  						alt14=1;
  					}
  					switch (alt14) {
  						case 1 :
  							// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:148:17: ( extends_key | super_key ) type
  							{
  							// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:148:17: ( extends_key | super_key )
  							int alt13=2;
  							int LA13_0 = input.LA(1);
  							if ( (LA13_0==ID) && ((((helper.validateIdentifierKey(DroolsSoftKeywords.SUPER)))||((helper.validateIdentifierKey(DroolsSoftKeywords.EXTENDS)))))) {
  								int LA13_1 = input.LA(2);
  								if ( (((helper.validateIdentifierKey(DroolsSoftKeywords.EXTENDS)))) ) {
  									alt13=1;
  								}
  								else if ( (((helper.validateIdentifierKey(DroolsSoftKeywords.SUPER)))) ) {
  									alt13=2;
  								}
  
  								else {
  									if (state.backtracking>0) {state.failed=true; return;}
  									int nvaeMark = input.mark();
  									try {
  										input.consume();
  										NoViableAltException nvae =
  											new NoViableAltException("", 13, 1, input);
  										throw nvae;
  									} finally {
  										input.rewind(nvaeMark);
  									}
  								}
  
  							}
  
  							switch (alt13) {
  								case 1 :
  									// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:148:18: extends_key
  									{
  									pushFollow(FOLLOW_extends_key_in_typeArgument680);
  									extends_key();
  									state._fsp--;
  									if (state.failed) return;
  									}
  									break;
  								case 2 :
  									// src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:148:32: super_key
  									{
  									pushFollow(FOLLOW_super_key_in_typeArgument684);
  									super_key();
  									state._fsp--;
  									if (state.failed) return;
  									}
  									break;
  
  							}
  
  							pushFollow(FOLLOW_type_in_typeArgument687);
  							type();
  							state._fsp--;
  							if (state.failed) return;
  							}
  							break;
  
  					}
  
  					}
  					break;
  
  			}
  		}
  
  		catch (RecognitionException re) {
  		    throw re;
  		}
  
  		finally {
  			// do for sure before leaving
  		}
  	}