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
		}
	}
public final void typeArgument ( ) throws RecognitionException { try { 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 : { pushFollow ( FOLLOW_type_in_typeArgument668 ) ; type ( ) ; state . _fsp -- ; if ( state . failed ) return ; } break ; case 2 : { match ( input , QUESTION , FOLLOW_QUESTION_in_typeArgument676 ) ; if ( state . failed ) return ; 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 : { 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 : { pushFollow ( FOLLOW_extends_key_in_typeArgument680 ) ; extends_key ( ) ; state . _fsp -- ; if ( state . failed ) return ; } break ; case 2 : { 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 { } }
src/main/resources/org/drools/compiler/lang/DRL5Expressions.g:146:1: typeArgument : ( type | QUESTION ( ( extends_key | super_key ) type )? );