// $ANTLR start "exprList"
    // Hql.g:619:1: exprList : ( TRAILING | LEADING | BOTH )? ( expression ( ( COMMA expression )+ | f= FROM expression | AS identifier )? | f2= FROM expression )? ;
    public HqlParser.exprList_return exprList() // throws RecognitionException [1]
    {   
        HqlParser.exprList_return retval = new HqlParser.exprList_return();
        retval.Start = input.LT(1);

        IASTNode root_0 = null;

        IToken f = null;
        IToken f2 = null;
        IToken TRAILING287 = null;
        IToken LEADING288 = null;
        IToken BOTH289 = null;
        IToken COMMA291 = null;
        IToken AS294 = null;
        HqlParser.expression_return expression290 = default(HqlParser.expression_return);

        HqlParser.expression_return expression292 = default(HqlParser.expression_return);

        HqlParser.expression_return expression293 = default(HqlParser.expression_return);

        HqlParser.identifier_return identifier295 = default(HqlParser.identifier_return);

        HqlParser.expression_return expression296 = default(HqlParser.expression_return);


        IASTNode f_tree=null;
        IASTNode f2_tree=null;
        IASTNode TRAILING287_tree=null;
        IASTNode LEADING288_tree=null;
        IASTNode BOTH289_tree=null;
        IASTNode COMMA291_tree=null;
        IASTNode AS294_tree=null;

        try 
    	{
            // Hql.g:625:2: ( ( TRAILING | LEADING | BOTH )? ( expression ( ( COMMA expression )+ | f= FROM expression | AS identifier )? | f2= FROM expression )? )
            // Hql.g:625:4: ( TRAILING | LEADING | BOTH )? ( expression ( ( COMMA expression )+ | f= FROM expression | AS identifier )? | f2= FROM expression )?
            {
            	root_0 = (IASTNode)adaptor.GetNilNode();

            	// Hql.g:625:4: ( TRAILING | LEADING | BOTH )?
            	int alt103 = 4;
            	switch ( input.LA(1) ) 
            	{
            	    case TRAILING:
            	    	{
            	        alt103 = 1;
            	        }
            	        break;
            	    case LEADING:
            	    	{
            	        alt103 = 2;
            	        }
            	        break;
            	    case BOTH:
            	    	{
            	        alt103 = 3;
            	        }
            	        break;
            	}

            	switch (alt103) 
            	{
            	    case 1 :
            	        // Hql.g:625:5: TRAILING
            	        {
            	        	TRAILING287=(IToken)Match(input,TRAILING,FOLLOW_TRAILING_in_exprList3387); 
            	        		TRAILING287_tree = (IASTNode)adaptor.Create(TRAILING287);
            	        		adaptor.AddChild(root_0, TRAILING287_tree);

            	        	TRAILING287.Type = IDENT;

            	        }
            	        break;
            	    case 2 :
            	        // Hql.g:626:10: LEADING
            	        {
            	        	LEADING288=(IToken)Match(input,LEADING,FOLLOW_LEADING_in_exprList3400); 
            	        		LEADING288_tree = (IASTNode)adaptor.Create(LEADING288);
            	        		adaptor.AddChild(root_0, LEADING288_tree);

            	        	LEADING288.Type = IDENT;

            	        }
            	        break;
            	    case 3 :
            	        // Hql.g:627:10: BOTH
            	        {
            	        	BOTH289=(IToken)Match(input,BOTH,FOLLOW_BOTH_in_exprList3413); 
            	        		BOTH289_tree = (IASTNode)adaptor.Create(BOTH289);
            	        		adaptor.AddChild(root_0, BOTH289_tree);

            	        	BOTH289.Type = IDENT;

            	        }
            	        break;

            	}

            	// Hql.g:629:4: ( expression ( ( COMMA expression )+ | f= FROM expression | AS identifier )? | f2= FROM expression )?
            	int alt106 = 3;
            	int LA106_0 = input.LA(1);

            	if ( ((LA106_0 >= ALL && LA106_0 <= ANY) || LA106_0 == AVG || LA106_0 == COUNT || LA106_0 == ELEMENTS || (LA106_0 >= EXISTS && LA106_0 <= FALSE) || LA106_0 == INDICES || (LA106_0 >= MAX && LA106_0 <= MIN) || (LA106_0 >= NOT && LA106_0 <= NULL) || (LA106_0 >= SOME && LA106_0 <= SUM) || LA106_0 == TRUE || LA106_0 == CASE || LA106_0 == EMPTY || (LA106_0 >= NUM_INT && LA106_0 <= NUM_LONG) || LA106_0 == OPEN || (LA106_0 >= COLON && LA106_0 <= PARAM) || LA106_0 == BNOT || (LA106_0 >= PLUS && LA106_0 <= MINUS) || (LA106_0 >= QUOTED_String && LA106_0 <= IDENT)) )
            	{
            	    alt106 = 1;
            	}
            	else if ( (LA106_0 == FROM) )
            	{
            	    alt106 = 2;
            	}
            	switch (alt106) 
            	{
            	    case 1 :
            	        // Hql.g:630:5: expression ( ( COMMA expression )+ | f= FROM expression | AS identifier )?
            	        {
            	        	PushFollow(FOLLOW_expression_in_exprList3437);
            	        	expression290 = expression();
            	        	state.followingStackPointer--;

            	        	adaptor.AddChild(root_0, expression290.Tree);
            	        	// Hql.g:630:16: ( ( COMMA expression )+ | f= FROM expression | AS identifier )?
            	        	int alt105 = 4;
            	        	switch ( input.LA(1) ) 
            	        	{
            	        	    case COMMA:
            	        	    	{
            	        	        alt105 = 1;
            	        	        }
            	        	        break;
            	        	    case FROM:
            	        	    	{
            	        	        alt105 = 2;
            	        	        }
            	        	        break;
            	        	    case AS:
            	        	    	{
            	        	        alt105 = 3;
            	        	        }
            	        	        break;
            	        	}

            	        	switch (alt105) 
            	        	{
            	        	    case 1 :
            	        	        // Hql.g:630:18: ( COMMA expression )+
            	        	        {
            	        	        	// Hql.g:630:18: ( COMMA expression )+
            	        	        	int cnt104 = 0;
            	        	        	do 
            	        	        	{
            	        	        	    int alt104 = 2;
            	        	        	    int LA104_0 = input.LA(1);

            	        	        	    if ( (LA104_0 == COMMA) )
            	        	        	    {
            	        	        	        alt104 = 1;
            	        	        	    }


            	        	        	    switch (alt104) 
            	        	        		{
            	        	        			case 1 :
            	        	        			    // Hql.g:630:19: COMMA expression
            	        	        			    {
            	        	        			    	COMMA291=(IToken)Match(input,COMMA,FOLLOW_COMMA_in_exprList3442); 
            	        	        			    	PushFollow(FOLLOW_expression_in_exprList3445);
            	        	        			    	expression292 = expression();
            	        	        			    	state.followingStackPointer--;

            	        	        			    	adaptor.AddChild(root_0, expression292.Tree);

            	        	        			    }
            	        	        			    break;

            	        	        			default:
            	        	        			    if ( cnt104 >= 1 ) goto loop104;
            	        	        		            EarlyExitException eee104 =
            	        	        		                new EarlyExitException(104, input);
            	        	        		            throw eee104;
            	        	        	    }
            	        	        	    cnt104++;
            	        	        	} while (true);

            	        	        	loop104:
            	        	        		;	// Stops C# compiler whining that label 'loop104' has no statements


            	        	        }
            	        	        break;
            	        	    case 2 :
            	        	        // Hql.g:631:9: f= FROM expression
            	        	        {
            	        	        	f=(IToken)Match(input,FROM,FOLLOW_FROM_in_exprList3460); 
            	        	        		f_tree = (IASTNode)adaptor.Create(f);
            	        	        		adaptor.AddChild(root_0, f_tree);

            	        	        	PushFollow(FOLLOW_expression_in_exprList3462);
            	        	        	expression293 = expression();
            	        	        	state.followingStackPointer--;

            	        	        	adaptor.AddChild(root_0, expression293.Tree);
            	        	        	f.Type = IDENT;

            	        	        }
            	        	        break;
            	        	    case 3 :
            	        	        // Hql.g:632:9: AS identifier
            	        	        {
            	        	        	AS294=(IToken)Match(input,AS,FOLLOW_AS_in_exprList3474); 
            	        	        	PushFollow(FOLLOW_identifier_in_exprList3477);
            	        	        	identifier295 = identifier();
            	        	        	state.followingStackPointer--;

            	        	        	adaptor.AddChild(root_0, identifier295.Tree);

            	        	        }
            	        	        break;

            	        	}


            	        }
            	        break;
            	    case 2 :
            	        // Hql.g:633:7: f2= FROM expression
            	        {
            	        	f2=(IToken)Match(input,FROM,FOLLOW_FROM_in_exprList3491); 
            	        		f2_tree = (IASTNode)adaptor.Create(f2);
            	        		adaptor.AddChild(root_0, f2_tree);

            	        	PushFollow(FOLLOW_expression_in_exprList3493);
            	        	expression296 = expression();
            	        	state.followingStackPointer--;

            	        	adaptor.AddChild(root_0, expression296.Tree);
            	        	f2.Type = IDENT;

            	        }
            	        break;

            	}


            }

            retval.Stop = input.LT(-1);

            	retval.Tree = (IASTNode)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);

               IASTNode root = (IASTNode) adaptor.Create(EXPR_LIST, "exprList");
               root.AddChild((IASTNode)retval.Tree);
               retval.Tree = root;

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (IASTNode)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR start "exprList"
    // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:601:1: exprList : ( TRAILING | LEADING | BOTH )? ( expression ( ( COMMA expression )+ | f= FROM expression | AS identifier )? | f2= FROM expression )? ;
    public HqlParser.exprList_return exprList() // throws RecognitionException [1]
    {   
        HqlParser.exprList_return retval = new HqlParser.exprList_return();
        retval.Start = input.LT(1);

        IASTNode root_0 = null;

        IToken f = null;
        IToken f2 = null;
        IToken TRAILING274 = null;
        IToken LEADING275 = null;
        IToken BOTH276 = null;
        IToken COMMA278 = null;
        IToken AS281 = null;
        HqlParser.expression_return expression277 = default(HqlParser.expression_return);

        HqlParser.expression_return expression279 = default(HqlParser.expression_return);

        HqlParser.expression_return expression280 = default(HqlParser.expression_return);

        HqlParser.identifier_return identifier282 = default(HqlParser.identifier_return);

        HqlParser.expression_return expression283 = default(HqlParser.expression_return);


        IASTNode f_tree=null;
        IASTNode f2_tree=null;
        IASTNode TRAILING274_tree=null;
        IASTNode LEADING275_tree=null;
        IASTNode BOTH276_tree=null;
        IASTNode COMMA278_tree=null;
        IASTNode AS281_tree=null;

        try 
    	{
            // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:607:2: ( ( TRAILING | LEADING | BOTH )? ( expression ( ( COMMA expression )+ | f= FROM expression | AS identifier )? | f2= FROM expression )? )
            // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:607:4: ( TRAILING | LEADING | BOTH )? ( expression ( ( COMMA expression )+ | f= FROM expression | AS identifier )? | f2= FROM expression )?
            {
            	root_0 = (IASTNode)adaptor.GetNilNode();

            	// /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:607:4: ( TRAILING | LEADING | BOTH )?
            	int alt97 = 4;
            	switch ( input.LA(1) ) 
            	{
            	    case TRAILING:
            	    	{
            	        alt97 = 1;
            	        }
            	        break;
            	    case LEADING:
            	    	{
            	        alt97 = 2;
            	        }
            	        break;
            	    case BOTH:
            	    	{
            	        alt97 = 3;
            	        }
            	        break;
            	}

            	switch (alt97) 
            	{
            	    case 1 :
            	        // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:607:5: TRAILING
            	        {
            	        	TRAILING274=(IToken)Match(input,TRAILING,FOLLOW_TRAILING_in_exprList3288); 
            	        		TRAILING274_tree = (IASTNode)adaptor.Create(TRAILING274);
            	        		adaptor.AddChild(root_0, TRAILING274_tree);

            	        	TRAILING274.Type = IDENT;

            	        }
            	        break;
            	    case 2 :
            	        // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:608:10: LEADING
            	        {
            	        	LEADING275=(IToken)Match(input,LEADING,FOLLOW_LEADING_in_exprList3301); 
            	        		LEADING275_tree = (IASTNode)adaptor.Create(LEADING275);
            	        		adaptor.AddChild(root_0, LEADING275_tree);

            	        	LEADING275.Type = IDENT;

            	        }
            	        break;
            	    case 3 :
            	        // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:609:10: BOTH
            	        {
            	        	BOTH276=(IToken)Match(input,BOTH,FOLLOW_BOTH_in_exprList3314); 
            	        		BOTH276_tree = (IASTNode)adaptor.Create(BOTH276);
            	        		adaptor.AddChild(root_0, BOTH276_tree);

            	        	BOTH276.Type = IDENT;

            	        }
            	        break;

            	}

            	// /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:611:4: ( expression ( ( COMMA expression )+ | f= FROM expression | AS identifier )? | f2= FROM expression )?
            	int alt100 = 3;
            	int LA100_0 = input.LA(1);

            	if ( ((LA100_0 >= ALL && LA100_0 <= ANY) || LA100_0 == AVG || LA100_0 == COUNT || LA100_0 == ELEMENTS || (LA100_0 >= EXISTS && LA100_0 <= FALSE) || LA100_0 == INDICES || (LA100_0 >= MAX && LA100_0 <= MIN) || (LA100_0 >= NOT && LA100_0 <= NULL) || (LA100_0 >= SOME && LA100_0 <= TRUE) || LA100_0 == CASE || LA100_0 == EMPTY || (LA100_0 >= NUM_INT && LA100_0 <= NUM_LONG) || LA100_0 == OPEN || LA100_0 == BNOT || (LA100_0 >= PLUS && LA100_0 <= MINUS) || (LA100_0 >= COLON && LA100_0 <= IDENT)) )
            	{
            	    alt100 = 1;
            	}
            	else if ( (LA100_0 == FROM) )
            	{
            	    alt100 = 2;
            	}
            	switch (alt100) 
            	{
            	    case 1 :
            	        // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:612:5: expression ( ( COMMA expression )+ | f= FROM expression | AS identifier )?
            	        {
            	        	PushFollow(FOLLOW_expression_in_exprList3338);
            	        	expression277 = expression();
            	        	state.followingStackPointer--;

            	        	adaptor.AddChild(root_0, expression277.Tree);
            	        	// /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:612:16: ( ( COMMA expression )+ | f= FROM expression | AS identifier )?
            	        	int alt99 = 4;
            	        	switch ( input.LA(1) ) 
            	        	{
            	        	    case COMMA:
            	        	    	{
            	        	        alt99 = 1;
            	        	        }
            	        	        break;
            	        	    case FROM:
            	        	    	{
            	        	        alt99 = 2;
            	        	        }
            	        	        break;
            	        	    case AS:
            	        	    	{
            	        	        alt99 = 3;
            	        	        }
            	        	        break;
            	        	}

            	        	switch (alt99) 
            	        	{
            	        	    case 1 :
            	        	        // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:612:18: ( COMMA expression )+
            	        	        {
            	        	        	// /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:612:18: ( COMMA expression )+
            	        	        	int cnt98 = 0;
            	        	        	do 
            	        	        	{
            	        	        	    int alt98 = 2;
            	        	        	    int LA98_0 = input.LA(1);

            	        	        	    if ( (LA98_0 == COMMA) )
            	        	        	    {
            	        	        	        alt98 = 1;
            	        	        	    }


            	        	        	    switch (alt98) 
            	        	        		{
            	        	        			case 1 :
            	        	        			    // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:612:19: COMMA expression
            	        	        			    {
            	        	        			    	COMMA278=(IToken)Match(input,COMMA,FOLLOW_COMMA_in_exprList3343); 
            	        	        			    	PushFollow(FOLLOW_expression_in_exprList3346);
            	        	        			    	expression279 = expression();
            	        	        			    	state.followingStackPointer--;

            	        	        			    	adaptor.AddChild(root_0, expression279.Tree);

            	        	        			    }
            	        	        			    break;

            	        	        			default:
            	        	        			    if ( cnt98 >= 1 ) goto loop98;
            	        	        		            EarlyExitException eee98 =
            	        	        		                new EarlyExitException(98, input);
            	        	        		            throw eee98;
            	        	        	    }
            	        	        	    cnt98++;
            	        	        	} while (true);

            	        	        	loop98:
            	        	        		;	// Stops C# compiler whinging that label 'loop98' has no statements


            	        	        }
            	        	        break;
            	        	    case 2 :
            	        	        // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:613:9: f= FROM expression
            	        	        {
            	        	        	f=(IToken)Match(input,FROM,FOLLOW_FROM_in_exprList3361); 
            	        	        		f_tree = (IASTNode)adaptor.Create(f);
            	        	        		adaptor.AddChild(root_0, f_tree);

            	        	        	PushFollow(FOLLOW_expression_in_exprList3363);
            	        	        	expression280 = expression();
            	        	        	state.followingStackPointer--;

            	        	        	adaptor.AddChild(root_0, expression280.Tree);
            	        	        	f.Type = IDENT;

            	        	        }
            	        	        break;
            	        	    case 3 :
            	        	        // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:614:9: AS identifier
            	        	        {
            	        	        	AS281=(IToken)Match(input,AS,FOLLOW_AS_in_exprList3375); 
            	        	        	PushFollow(FOLLOW_identifier_in_exprList3378);
            	        	        	identifier282 = identifier();
            	        	        	state.followingStackPointer--;

            	        	        	adaptor.AddChild(root_0, identifier282.Tree);

            	        	        }
            	        	        break;

            	        	}


            	        }
            	        break;
            	    case 2 :
            	        // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:615:7: f2= FROM expression
            	        {
            	        	f2=(IToken)Match(input,FROM,FOLLOW_FROM_in_exprList3392); 
            	        		f2_tree = (IASTNode)adaptor.Create(f2);
            	        		adaptor.AddChild(root_0, f2_tree);

            	        	PushFollow(FOLLOW_expression_in_exprList3394);
            	        	expression283 = expression();
            	        	state.followingStackPointer--;

            	        	adaptor.AddChild(root_0, expression283.Tree);
            	        	f2.Type = IDENT;

            	        }
            	        break;

            	}


            }

            retval.Stop = input.LT(-1);

            	retval.Tree = (IASTNode)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);

               IASTNode root = (IASTNode) adaptor.Create(EXPR_LIST, "exprList");
               root.AddChild((IASTNode)retval.Tree);
               retval.Tree = root;

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (IASTNode)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }
Example #3
0
    // $ANTLR start "exprList"
    // Hql.g:614:1: exprList : ( TRAILING | LEADING | BOTH )? ( expression ( ( COMMA expression )+ | f= FROM expression | AS identifier )? | f2= FROM expression )? ;
    public HqlParser.exprList_return exprList() // throws RecognitionException [1]
    {   
        HqlParser.exprList_return retval = new HqlParser.exprList_return();
        retval.Start = input.LT(1);

        IASTNode root_0 = null;

        IToken f = null;
        IToken f2 = null;
        IToken TRAILING281 = null;
        IToken LEADING282 = null;
        IToken BOTH283 = null;
        IToken COMMA285 = null;
        IToken AS288 = null;
        HqlParser.expression_return expression284 = default(HqlParser.expression_return);

        HqlParser.expression_return expression286 = default(HqlParser.expression_return);

        HqlParser.expression_return expression287 = default(HqlParser.expression_return);

        HqlParser.identifier_return identifier289 = default(HqlParser.identifier_return);

        HqlParser.expression_return expression290 = default(HqlParser.expression_return);


        IASTNode f_tree=null;
        IASTNode f2_tree=null;
        IASTNode TRAILING281_tree=null;
        IASTNode LEADING282_tree=null;
        IASTNode BOTH283_tree=null;
        IASTNode COMMA285_tree=null;
        IASTNode AS288_tree=null;

        try 
    	{
            // Hql.g:620:2: ( ( TRAILING | LEADING | BOTH )? ( expression ( ( COMMA expression )+ | f= FROM expression | AS identifier )? | f2= FROM expression )? )
            // Hql.g:620:4: ( TRAILING | LEADING | BOTH )? ( expression ( ( COMMA expression )+ | f= FROM expression | AS identifier )? | f2= FROM expression )?
            {
            	root_0 = (IASTNode)adaptor.GetNilNode();

            	// Hql.g:620:4: ( TRAILING | LEADING | BOTH )?
            	int alt99 = 4;
            	switch ( input.LA(1) ) 
            	{
            	    case TRAILING:
            	    	{
            	        alt99 = 1;
            	        }
            	        break;
            	    case LEADING:
            	    	{
            	        alt99 = 2;
            	        }
            	        break;
            	    case BOTH:
            	    	{
            	        alt99 = 3;
            	        }
            	        break;
            	}

            	switch (alt99) 
            	{
            	    case 1 :
            	        // Hql.g:620:5: TRAILING
            	        {
            	        	TRAILING281=(IToken)Match(input,TRAILING,FOLLOW_TRAILING_in_exprList3350); 
            	        		TRAILING281_tree = (IASTNode)adaptor.Create(TRAILING281);
            	        		adaptor.AddChild(root_0, TRAILING281_tree);

            	        	TRAILING281.Type = IDENT;

            	        }
            	        break;
            	    case 2 :
            	        // Hql.g:621:10: LEADING
            	        {
            	        	LEADING282=(IToken)Match(input,LEADING,FOLLOW_LEADING_in_exprList3363); 
            	        		LEADING282_tree = (IASTNode)adaptor.Create(LEADING282);
            	        		adaptor.AddChild(root_0, LEADING282_tree);

            	        	LEADING282.Type = IDENT;

            	        }
            	        break;
            	    case 3 :
            	        // Hql.g:622:10: BOTH
            	        {
            	        	BOTH283=(IToken)Match(input,BOTH,FOLLOW_BOTH_in_exprList3376); 
            	        		BOTH283_tree = (IASTNode)adaptor.Create(BOTH283);
            	        		adaptor.AddChild(root_0, BOTH283_tree);

            	        	BOTH283.Type = IDENT;

            	        }
            	        break;

            	}

            	// Hql.g:624:4: ( expression ( ( COMMA expression )+ | f= FROM expression | AS identifier )? | f2= FROM expression )?
            	int alt102 = 3;
            	int LA102_0 = input.LA(1);

            	if ( ((LA102_0 >= ALL && LA102_0 <= ANY) || LA102_0 == AVG || LA102_0 == COUNT || LA102_0 == ELEMENTS || (LA102_0 >= EXISTS && LA102_0 <= FALSE) || LA102_0 == INDICES || (LA102_0 >= MAX && LA102_0 <= MIN) || (LA102_0 >= NOT && LA102_0 <= NULL) || (LA102_0 >= SOME && LA102_0 <= SUM) || LA102_0 == TRUE || LA102_0 == CASE || LA102_0 == EMPTY || (LA102_0 >= NUM_INT && LA102_0 <= NUM_LONG) || LA102_0 == OPEN || LA102_0 == BNOT || (LA102_0 >= PLUS && LA102_0 <= MINUS) || (LA102_0 >= COLON && LA102_0 <= IDENT)) )
            	{
            	    alt102 = 1;
            	}
            	else if ( (LA102_0 == FROM) )
            	{
            	    alt102 = 2;
            	}
            	switch (alt102) 
            	{
            	    case 1 :
            	        // Hql.g:625:5: expression ( ( COMMA expression )+ | f= FROM expression | AS identifier )?
            	        {
            	        	PushFollow(FOLLOW_expression_in_exprList3400);
            	        	expression284 = expression();
            	        	state.followingStackPointer--;

            	        	adaptor.AddChild(root_0, expression284.Tree);
            	        	// Hql.g:625:16: ( ( COMMA expression )+ | f= FROM expression | AS identifier )?
            	        	int alt101 = 4;
            	        	switch ( input.LA(1) ) 
            	        	{
            	        	    case COMMA:
            	        	    	{
            	        	        alt101 = 1;
            	        	        }
            	        	        break;
            	        	    case FROM:
            	        	    	{
            	        	        alt101 = 2;
            	        	        }
            	        	        break;
            	        	    case AS:
            	        	    	{
            	        	        alt101 = 3;
            	        	        }
            	        	        break;
            	        	}

            	        	switch (alt101) 
            	        	{
            	        	    case 1 :
            	        	        // Hql.g:625:18: ( COMMA expression )+
            	        	        {
            	        	        	// Hql.g:625:18: ( COMMA expression )+
            	        	        	int cnt100 = 0;
            	        	        	do 
            	        	        	{
            	        	        	    int alt100 = 2;
            	        	        	    int LA100_0 = input.LA(1);

            	        	        	    if ( (LA100_0 == COMMA) )
            	        	        	    {
            	        	        	        alt100 = 1;
            	        	        	    }


            	        	        	    switch (alt100) 
            	        	        		{
            	        	        			case 1 :
            	        	        			    // Hql.g:625:19: COMMA expression
            	        	        			    {
            	        	        			    	COMMA285=(IToken)Match(input,COMMA,FOLLOW_COMMA_in_exprList3405); 
            	        	        			    	PushFollow(FOLLOW_expression_in_exprList3408);
            	        	        			    	expression286 = expression();
            	        	        			    	state.followingStackPointer--;

            	        	        			    	adaptor.AddChild(root_0, expression286.Tree);

            	        	        			    }
            	        	        			    break;

            	        	        			default:
            	        	        			    if ( cnt100 >= 1 ) goto loop100;
            	        	        		            EarlyExitException eee100 =
            	        	        		                new EarlyExitException(100, input);
            	        	        		            throw eee100;
            	        	        	    }
            	        	        	    cnt100++;
            	        	        	} while (true);

            	        	        	loop100:
            	        	        		;	// Stops C# compiler whining that label 'loop100' has no statements


            	        	        }
            	        	        break;
            	        	    case 2 :
            	        	        // Hql.g:626:9: f= FROM expression
            	        	        {
            	        	        	f=(IToken)Match(input,FROM,FOLLOW_FROM_in_exprList3423); 
            	        	        		f_tree = (IASTNode)adaptor.Create(f);
            	        	        		adaptor.AddChild(root_0, f_tree);

            	        	        	PushFollow(FOLLOW_expression_in_exprList3425);
            	        	        	expression287 = expression();
            	        	        	state.followingStackPointer--;

            	        	        	adaptor.AddChild(root_0, expression287.Tree);
            	        	        	f.Type = IDENT;

            	        	        }
            	        	        break;
            	        	    case 3 :
            	        	        // Hql.g:627:9: AS identifier
            	        	        {
            	        	        	AS288=(IToken)Match(input,AS,FOLLOW_AS_in_exprList3437); 
            	        	        	PushFollow(FOLLOW_identifier_in_exprList3440);
            	        	        	identifier289 = identifier();
            	        	        	state.followingStackPointer--;

            	        	        	adaptor.AddChild(root_0, identifier289.Tree);

            	        	        }
            	        	        break;

            	        	}


            	        }
            	        break;
            	    case 2 :
            	        // Hql.g:628:7: f2= FROM expression
            	        {
            	        	f2=(IToken)Match(input,FROM,FOLLOW_FROM_in_exprList3454); 
            	        		f2_tree = (IASTNode)adaptor.Create(f2);
            	        		adaptor.AddChild(root_0, f2_tree);

            	        	PushFollow(FOLLOW_expression_in_exprList3456);
            	        	expression290 = expression();
            	        	state.followingStackPointer--;

            	        	adaptor.AddChild(root_0, expression290.Tree);
            	        	f2.Type = IDENT;

            	        }
            	        break;

            	}


            }

            retval.Stop = input.LT(-1);

            	retval.Tree = (IASTNode)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);

               IASTNode root = (IASTNode) adaptor.Create(EXPR_LIST, "exprList");
               root.AddChild((IASTNode)retval.Tree);
               retval.Tree = root;

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (IASTNode)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
        }
        return retval;
    }