Exemplo n.º 1
0
    // $ANTLR start "caseExpr"
    // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/HqlSqlWalker.g:379:1: caseExpr : ( ^( CASE ( ^( WHEN logicalExpr expr ) )+ ( ^( ELSE expr ) )? ) | ^( CASE2 expr ( ^( WHEN expr expr ) )+ ( ^( ELSE expr ) )? ) );
    public HqlSqlWalker.caseExpr_return caseExpr() // throws RecognitionException [1]
    {   
        HqlSqlWalker.caseExpr_return retval = new HqlSqlWalker.caseExpr_return();
        retval.Start = input.LT(1);

        IASTNode root_0 = null;

        IASTNode _first_0 = null;
        IASTNode _last = null;

        IASTNode CASE171 = null;
        IASTNode WHEN172 = null;
        IASTNode ELSE175 = null;
        IASTNode CASE2177 = null;
        IASTNode WHEN179 = null;
        IASTNode ELSE182 = null;
        HqlSqlWalker.logicalExpr_return logicalExpr173 = default(HqlSqlWalker.logicalExpr_return);

        HqlSqlWalker.expr_return expr174 = default(HqlSqlWalker.expr_return);

        HqlSqlWalker.expr_return expr176 = default(HqlSqlWalker.expr_return);

        HqlSqlWalker.expr_return expr178 = default(HqlSqlWalker.expr_return);

        HqlSqlWalker.expr_return expr180 = default(HqlSqlWalker.expr_return);

        HqlSqlWalker.expr_return expr181 = default(HqlSqlWalker.expr_return);

        HqlSqlWalker.expr_return expr183 = default(HqlSqlWalker.expr_return);


        IASTNode CASE171_tree=null;
        IASTNode WHEN172_tree=null;
        IASTNode ELSE175_tree=null;
        IASTNode CASE2177_tree=null;
        IASTNode WHEN179_tree=null;
        IASTNode ELSE182_tree=null;

        try 
    	{
            // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/HqlSqlWalker.g:380:2: ( ^( CASE ( ^( WHEN logicalExpr expr ) )+ ( ^( ELSE expr ) )? ) | ^( CASE2 expr ( ^( WHEN expr expr ) )+ ( ^( ELSE expr ) )? ) )
            int alt54 = 2;
            int LA54_0 = input.LA(1);

            if ( (LA54_0 == CASE) )
            {
                alt54 = 1;
            }
            else if ( (LA54_0 == CASE2) )
            {
                alt54 = 2;
            }
            else 
            {
                NoViableAltException nvae_d54s0 =
                    new NoViableAltException("", 54, 0, input);

                throw nvae_d54s0;
            }
            switch (alt54) 
            {
                case 1 :
                    // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/HqlSqlWalker.g:380:4: ^( CASE ( ^( WHEN logicalExpr expr ) )+ ( ^( ELSE expr ) )? )
                    {
                    	root_0 = (IASTNode)adaptor.GetNilNode();

                    	_last = (IASTNode)input.LT(1);
                    	{
                    	IASTNode _save_last_1 = _last;
                    	IASTNode _first_1 = null;
                    	IASTNode root_1 = (IASTNode)adaptor.GetNilNode();_last = (IASTNode)input.LT(1);
                    	CASE171=(IASTNode)Match(input,CASE,FOLLOW_CASE_in_caseExpr1934); 
                    		CASE171_tree = (IASTNode)adaptor.DupNode(CASE171);

                    		root_1 = (IASTNode)adaptor.BecomeRoot(CASE171_tree, root_1);


                    	 _inCase = true; 

                    	Match(input, Token.DOWN, null); 
                    	// /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/HqlSqlWalker.g:380:31: ( ^( WHEN logicalExpr expr ) )+
                    	int cnt50 = 0;
                    	do 
                    	{
                    	    int alt50 = 2;
                    	    int LA50_0 = input.LA(1);

                    	    if ( (LA50_0 == WHEN) )
                    	    {
                    	        alt50 = 1;
                    	    }


                    	    switch (alt50) 
                    		{
                    			case 1 :
                    			    // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/HqlSqlWalker.g:380:32: ^( WHEN logicalExpr expr )
                    			    {
                    			    	_last = (IASTNode)input.LT(1);
                    			    	{
                    			    	IASTNode _save_last_2 = _last;
                    			    	IASTNode _first_2 = null;
                    			    	IASTNode root_2 = (IASTNode)adaptor.GetNilNode();_last = (IASTNode)input.LT(1);
                    			    	WHEN172=(IASTNode)Match(input,WHEN,FOLLOW_WHEN_in_caseExpr1940); 
                    			    		WHEN172_tree = (IASTNode)adaptor.DupNode(WHEN172);

                    			    		root_2 = (IASTNode)adaptor.BecomeRoot(WHEN172_tree, root_2);



                    			    	Match(input, Token.DOWN, null); 
                    			    	_last = (IASTNode)input.LT(1);
                    			    	PushFollow(FOLLOW_logicalExpr_in_caseExpr1942);
                    			    	logicalExpr173 = logicalExpr();
                    			    	state.followingStackPointer--;

                    			    	adaptor.AddChild(root_2, logicalExpr173.Tree);
                    			    	_last = (IASTNode)input.LT(1);
                    			    	PushFollow(FOLLOW_expr_in_caseExpr1944);
                    			    	expr174 = expr();
                    			    	state.followingStackPointer--;

                    			    	adaptor.AddChild(root_2, expr174.Tree);

                    			    	Match(input, Token.UP, null); adaptor.AddChild(root_1, root_2);_last = _save_last_2;
                    			    	}


                    			    }
                    			    break;

                    			default:
                    			    if ( cnt50 >= 1 ) goto loop50;
                    		            EarlyExitException eee50 =
                    		                new EarlyExitException(50, input);
                    		            throw eee50;
                    	    }
                    	    cnt50++;
                    	} while (true);

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

                    	// /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/HqlSqlWalker.g:380:59: ( ^( ELSE expr ) )?
                    	int alt51 = 2;
                    	int LA51_0 = input.LA(1);

                    	if ( (LA51_0 == ELSE) )
                    	{
                    	    alt51 = 1;
                    	}
                    	switch (alt51) 
                    	{
                    	    case 1 :
                    	        // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/HqlSqlWalker.g:380:60: ^( ELSE expr )
                    	        {
                    	        	_last = (IASTNode)input.LT(1);
                    	        	{
                    	        	IASTNode _save_last_2 = _last;
                    	        	IASTNode _first_2 = null;
                    	        	IASTNode root_2 = (IASTNode)adaptor.GetNilNode();_last = (IASTNode)input.LT(1);
                    	        	ELSE175=(IASTNode)Match(input,ELSE,FOLLOW_ELSE_in_caseExpr1951); 
                    	        		ELSE175_tree = (IASTNode)adaptor.DupNode(ELSE175);

                    	        		root_2 = (IASTNode)adaptor.BecomeRoot(ELSE175_tree, root_2);



                    	        	Match(input, Token.DOWN, null); 
                    	        	_last = (IASTNode)input.LT(1);
                    	        	PushFollow(FOLLOW_expr_in_caseExpr1953);
                    	        	expr176 = expr();
                    	        	state.followingStackPointer--;

                    	        	adaptor.AddChild(root_2, expr176.Tree);

                    	        	Match(input, Token.UP, null); adaptor.AddChild(root_1, root_2);_last = _save_last_2;
                    	        	}


                    	        }
                    	        break;

                    	}


                    	Match(input, Token.UP, null); adaptor.AddChild(root_0, root_1);_last = _save_last_1;
                    	}

                    	 _inCase = false; 

                    }
                    break;
                case 2 :
                    // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/HqlSqlWalker.g:381:4: ^( CASE2 expr ( ^( WHEN expr expr ) )+ ( ^( ELSE expr ) )? )
                    {
                    	root_0 = (IASTNode)adaptor.GetNilNode();

                    	_last = (IASTNode)input.LT(1);
                    	{
                    	IASTNode _save_last_1 = _last;
                    	IASTNode _first_1 = null;
                    	IASTNode root_1 = (IASTNode)adaptor.GetNilNode();_last = (IASTNode)input.LT(1);
                    	CASE2177=(IASTNode)Match(input,CASE2,FOLLOW_CASE2_in_caseExpr1965); 
                    		CASE2177_tree = (IASTNode)adaptor.DupNode(CASE2177);

                    		root_1 = (IASTNode)adaptor.BecomeRoot(CASE2177_tree, root_1);


                    	 _inCase = true; 

                    	Match(input, Token.DOWN, null); 
                    	_last = (IASTNode)input.LT(1);
                    	PushFollow(FOLLOW_expr_in_caseExpr1969);
                    	expr178 = expr();
                    	state.followingStackPointer--;

                    	adaptor.AddChild(root_1, expr178.Tree);
                    	// /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/HqlSqlWalker.g:381:37: ( ^( WHEN expr expr ) )+
                    	int cnt52 = 0;
                    	do 
                    	{
                    	    int alt52 = 2;
                    	    int LA52_0 = input.LA(1);

                    	    if ( (LA52_0 == WHEN) )
                    	    {
                    	        alt52 = 1;
                    	    }


                    	    switch (alt52) 
                    		{
                    			case 1 :
                    			    // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/HqlSqlWalker.g:381:38: ^( WHEN expr expr )
                    			    {
                    			    	_last = (IASTNode)input.LT(1);
                    			    	{
                    			    	IASTNode _save_last_2 = _last;
                    			    	IASTNode _first_2 = null;
                    			    	IASTNode root_2 = (IASTNode)adaptor.GetNilNode();_last = (IASTNode)input.LT(1);
                    			    	WHEN179=(IASTNode)Match(input,WHEN,FOLLOW_WHEN_in_caseExpr1973); 
                    			    		WHEN179_tree = (IASTNode)adaptor.DupNode(WHEN179);

                    			    		root_2 = (IASTNode)adaptor.BecomeRoot(WHEN179_tree, root_2);



                    			    	Match(input, Token.DOWN, null); 
                    			    	_last = (IASTNode)input.LT(1);
                    			    	PushFollow(FOLLOW_expr_in_caseExpr1975);
                    			    	expr180 = expr();
                    			    	state.followingStackPointer--;

                    			    	adaptor.AddChild(root_2, expr180.Tree);
                    			    	_last = (IASTNode)input.LT(1);
                    			    	PushFollow(FOLLOW_expr_in_caseExpr1977);
                    			    	expr181 = expr();
                    			    	state.followingStackPointer--;

                    			    	adaptor.AddChild(root_2, expr181.Tree);

                    			    	Match(input, Token.UP, null); adaptor.AddChild(root_1, root_2);_last = _save_last_2;
                    			    	}


                    			    }
                    			    break;

                    			default:
                    			    if ( cnt52 >= 1 ) goto loop52;
                    		            EarlyExitException eee52 =
                    		                new EarlyExitException(52, input);
                    		            throw eee52;
                    	    }
                    	    cnt52++;
                    	} while (true);

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

                    	// /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/HqlSqlWalker.g:381:58: ( ^( ELSE expr ) )?
                    	int alt53 = 2;
                    	int LA53_0 = input.LA(1);

                    	if ( (LA53_0 == ELSE) )
                    	{
                    	    alt53 = 1;
                    	}
                    	switch (alt53) 
                    	{
                    	    case 1 :
                    	        // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/HqlSqlWalker.g:381:59: ^( ELSE expr )
                    	        {
                    	        	_last = (IASTNode)input.LT(1);
                    	        	{
                    	        	IASTNode _save_last_2 = _last;
                    	        	IASTNode _first_2 = null;
                    	        	IASTNode root_2 = (IASTNode)adaptor.GetNilNode();_last = (IASTNode)input.LT(1);
                    	        	ELSE182=(IASTNode)Match(input,ELSE,FOLLOW_ELSE_in_caseExpr1984); 
                    	        		ELSE182_tree = (IASTNode)adaptor.DupNode(ELSE182);

                    	        		root_2 = (IASTNode)adaptor.BecomeRoot(ELSE182_tree, root_2);



                    	        	Match(input, Token.DOWN, null); 
                    	        	_last = (IASTNode)input.LT(1);
                    	        	PushFollow(FOLLOW_expr_in_caseExpr1986);
                    	        	expr183 = expr();
                    	        	state.followingStackPointer--;

                    	        	adaptor.AddChild(root_2, expr183.Tree);

                    	        	Match(input, Token.UP, null); adaptor.AddChild(root_1, root_2);_last = _save_last_2;
                    	        	}


                    	        }
                    	        break;

                    	}


                    	Match(input, Token.UP, null); adaptor.AddChild(root_0, root_1);_last = _save_last_1;
                    	}

                    	 _inCase = false; 

                    }
                    break;

            }
            	retval.Tree = (IASTNode)adaptor.RulePostProcessing(root_0);

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return retval;
    }
Exemplo n.º 2
0
    // $ANTLR start "caseExpr"
    // HqlSqlWalker.g:403:1: caseExpr : ( ^( CASE ( ^( WHEN logicalExpr expr ) )+ ( ^( ELSE expr ) )? ) | ^( CASE2 expr ( ^( WHEN expr expr ) )+ ( ^( ELSE expr ) )? ) );
    public HqlSqlWalker.caseExpr_return caseExpr() // throws RecognitionException [1]
    {   
        HqlSqlWalker.caseExpr_return retval = new HqlSqlWalker.caseExpr_return();
        retval.Start = input.LT(1);

        IASTNode root_0 = null;

        IASTNode _first_0 = null;
        IASTNode _last = null;

        IASTNode CASE177 = null;
        IASTNode WHEN178 = null;
        IASTNode ELSE181 = null;
        IASTNode CASE2183 = null;
        IASTNode WHEN185 = null;
        IASTNode ELSE188 = null;
        HqlSqlWalker.logicalExpr_return logicalExpr179 = default(HqlSqlWalker.logicalExpr_return);

        HqlSqlWalker.expr_return expr180 = default(HqlSqlWalker.expr_return);

        HqlSqlWalker.expr_return expr182 = default(HqlSqlWalker.expr_return);

        HqlSqlWalker.expr_return expr184 = default(HqlSqlWalker.expr_return);

        HqlSqlWalker.expr_return expr186 = default(HqlSqlWalker.expr_return);

        HqlSqlWalker.expr_return expr187 = default(HqlSqlWalker.expr_return);

        HqlSqlWalker.expr_return expr189 = default(HqlSqlWalker.expr_return);


        IASTNode CASE177_tree=null;
        IASTNode WHEN178_tree=null;
        IASTNode ELSE181_tree=null;
        IASTNode CASE2183_tree=null;
        IASTNode WHEN185_tree=null;
        IASTNode ELSE188_tree=null;

        try 
    	{
            // HqlSqlWalker.g:404:2: ( ^( CASE ( ^( WHEN logicalExpr expr ) )+ ( ^( ELSE expr ) )? ) | ^( CASE2 expr ( ^( WHEN expr expr ) )+ ( ^( ELSE expr ) )? ) )
            int alt56 = 2;
            int LA56_0 = input.LA(1);

            if ( (LA56_0 == CASE) )
            {
                alt56 = 1;
            }
            else if ( (LA56_0 == CASE2) )
            {
                alt56 = 2;
            }
            else 
            {
                NoViableAltException nvae_d56s0 =
                    new NoViableAltException("", 56, 0, input);

                throw nvae_d56s0;
            }
            switch (alt56) 
            {
                case 1 :
                    // HqlSqlWalker.g:404:4: ^( CASE ( ^( WHEN logicalExpr expr ) )+ ( ^( ELSE expr ) )? )
                    {
                    	root_0 = (IASTNode)adaptor.GetNilNode();

                    	_last = (IASTNode)input.LT(1);
                    	{
                    	IASTNode _save_last_1 = _last;
                    	IASTNode _first_1 = null;
                    	IASTNode root_1 = (IASTNode)adaptor.GetNilNode();_last = (IASTNode)input.LT(1);
                    	CASE177=(IASTNode)Match(input,CASE,FOLLOW_CASE_in_caseExpr2054); 
                    		CASE177_tree = (IASTNode)adaptor.DupNode(CASE177);

                    		root_1 = (IASTNode)adaptor.BecomeRoot(CASE177_tree, root_1);


                    	 _inCase = true; 

                    	Match(input, Token.DOWN, null); 
                    	// HqlSqlWalker.g:404:31: ( ^( WHEN logicalExpr expr ) )+
                    	int cnt52 = 0;
                    	do 
                    	{
                    	    int alt52 = 2;
                    	    int LA52_0 = input.LA(1);

                    	    if ( (LA52_0 == WHEN) )
                    	    {
                    	        alt52 = 1;
                    	    }


                    	    switch (alt52) 
                    		{
                    			case 1 :
                    			    // HqlSqlWalker.g:404:32: ^( WHEN logicalExpr expr )
                    			    {
                    			    	_last = (IASTNode)input.LT(1);
                    			    	{
                    			    	IASTNode _save_last_2 = _last;
                    			    	IASTNode _first_2 = null;
                    			    	IASTNode root_2 = (IASTNode)adaptor.GetNilNode();_last = (IASTNode)input.LT(1);
                    			    	WHEN178=(IASTNode)Match(input,WHEN,FOLLOW_WHEN_in_caseExpr2060); 
                    			    		WHEN178_tree = (IASTNode)adaptor.DupNode(WHEN178);

                    			    		root_2 = (IASTNode)adaptor.BecomeRoot(WHEN178_tree, root_2);



                    			    	Match(input, Token.DOWN, null); 
                    			    	_last = (IASTNode)input.LT(1);
                    			    	PushFollow(FOLLOW_logicalExpr_in_caseExpr2062);
                    			    	logicalExpr179 = logicalExpr();
                    			    	state.followingStackPointer--;

                    			    	adaptor.AddChild(root_2, logicalExpr179.Tree);
                    			    	_last = (IASTNode)input.LT(1);
                    			    	PushFollow(FOLLOW_expr_in_caseExpr2064);
                    			    	expr180 = expr();
                    			    	state.followingStackPointer--;

                    			    	adaptor.AddChild(root_2, expr180.Tree);

                    			    	Match(input, Token.UP, null); adaptor.AddChild(root_1, root_2);_last = _save_last_2;
                    			    	}


                    			    }
                    			    break;

                    			default:
                    			    if ( cnt52 >= 1 ) goto loop52;
                    		            EarlyExitException eee52 =
                    		                new EarlyExitException(52, input);
                    		            throw eee52;
                    	    }
                    	    cnt52++;
                    	} while (true);

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

                    	// HqlSqlWalker.g:404:59: ( ^( ELSE expr ) )?
                    	int alt53 = 2;
                    	int LA53_0 = input.LA(1);

                    	if ( (LA53_0 == ELSE) )
                    	{
                    	    alt53 = 1;
                    	}
                    	switch (alt53) 
                    	{
                    	    case 1 :
                    	        // HqlSqlWalker.g:404:60: ^( ELSE expr )
                    	        {
                    	        	_last = (IASTNode)input.LT(1);
                    	        	{
                    	        	IASTNode _save_last_2 = _last;
                    	        	IASTNode _first_2 = null;
                    	        	IASTNode root_2 = (IASTNode)adaptor.GetNilNode();_last = (IASTNode)input.LT(1);
                    	        	ELSE181=(IASTNode)Match(input,ELSE,FOLLOW_ELSE_in_caseExpr2071); 
                    	        		ELSE181_tree = (IASTNode)adaptor.DupNode(ELSE181);

                    	        		root_2 = (IASTNode)adaptor.BecomeRoot(ELSE181_tree, root_2);



                    	        	Match(input, Token.DOWN, null); 
                    	        	_last = (IASTNode)input.LT(1);
                    	        	PushFollow(FOLLOW_expr_in_caseExpr2073);
                    	        	expr182 = expr();
                    	        	state.followingStackPointer--;

                    	        	adaptor.AddChild(root_2, expr182.Tree);

                    	        	Match(input, Token.UP, null); adaptor.AddChild(root_1, root_2);_last = _save_last_2;
                    	        	}


                    	        }
                    	        break;

                    	}


                    	Match(input, Token.UP, null); adaptor.AddChild(root_0, root_1);_last = _save_last_1;
                    	}

                    	 _inCase = false; 

                    }
                    break;
                case 2 :
                    // HqlSqlWalker.g:405:4: ^( CASE2 expr ( ^( WHEN expr expr ) )+ ( ^( ELSE expr ) )? )
                    {
                    	root_0 = (IASTNode)adaptor.GetNilNode();

                    	_last = (IASTNode)input.LT(1);
                    	{
                    	IASTNode _save_last_1 = _last;
                    	IASTNode _first_1 = null;
                    	IASTNode root_1 = (IASTNode)adaptor.GetNilNode();_last = (IASTNode)input.LT(1);
                    	CASE2183=(IASTNode)Match(input,CASE2,FOLLOW_CASE2_in_caseExpr2085); 
                    		CASE2183_tree = (IASTNode)adaptor.DupNode(CASE2183);

                    		root_1 = (IASTNode)adaptor.BecomeRoot(CASE2183_tree, root_1);


                    	 _inCase = true; 

                    	Match(input, Token.DOWN, null); 
                    	_last = (IASTNode)input.LT(1);
                    	PushFollow(FOLLOW_expr_in_caseExpr2089);
                    	expr184 = expr();
                    	state.followingStackPointer--;

                    	adaptor.AddChild(root_1, expr184.Tree);
                    	// HqlSqlWalker.g:405:37: ( ^( WHEN expr expr ) )+
                    	int cnt54 = 0;
                    	do 
                    	{
                    	    int alt54 = 2;
                    	    int LA54_0 = input.LA(1);

                    	    if ( (LA54_0 == WHEN) )
                    	    {
                    	        alt54 = 1;
                    	    }


                    	    switch (alt54) 
                    		{
                    			case 1 :
                    			    // HqlSqlWalker.g:405:38: ^( WHEN expr expr )
                    			    {
                    			    	_last = (IASTNode)input.LT(1);
                    			    	{
                    			    	IASTNode _save_last_2 = _last;
                    			    	IASTNode _first_2 = null;
                    			    	IASTNode root_2 = (IASTNode)adaptor.GetNilNode();_last = (IASTNode)input.LT(1);
                    			    	WHEN185=(IASTNode)Match(input,WHEN,FOLLOW_WHEN_in_caseExpr2093); 
                    			    		WHEN185_tree = (IASTNode)adaptor.DupNode(WHEN185);

                    			    		root_2 = (IASTNode)adaptor.BecomeRoot(WHEN185_tree, root_2);



                    			    	Match(input, Token.DOWN, null); 
                    			    	_last = (IASTNode)input.LT(1);
                    			    	PushFollow(FOLLOW_expr_in_caseExpr2095);
                    			    	expr186 = expr();
                    			    	state.followingStackPointer--;

                    			    	adaptor.AddChild(root_2, expr186.Tree);
                    			    	_last = (IASTNode)input.LT(1);
                    			    	PushFollow(FOLLOW_expr_in_caseExpr2097);
                    			    	expr187 = expr();
                    			    	state.followingStackPointer--;

                    			    	adaptor.AddChild(root_2, expr187.Tree);

                    			    	Match(input, Token.UP, null); adaptor.AddChild(root_1, root_2);_last = _save_last_2;
                    			    	}


                    			    }
                    			    break;

                    			default:
                    			    if ( cnt54 >= 1 ) goto loop54;
                    		            EarlyExitException eee54 =
                    		                new EarlyExitException(54, input);
                    		            throw eee54;
                    	    }
                    	    cnt54++;
                    	} while (true);

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

                    	// HqlSqlWalker.g:405:58: ( ^( ELSE expr ) )?
                    	int alt55 = 2;
                    	int LA55_0 = input.LA(1);

                    	if ( (LA55_0 == ELSE) )
                    	{
                    	    alt55 = 1;
                    	}
                    	switch (alt55) 
                    	{
                    	    case 1 :
                    	        // HqlSqlWalker.g:405:59: ^( ELSE expr )
                    	        {
                    	        	_last = (IASTNode)input.LT(1);
                    	        	{
                    	        	IASTNode _save_last_2 = _last;
                    	        	IASTNode _first_2 = null;
                    	        	IASTNode root_2 = (IASTNode)adaptor.GetNilNode();_last = (IASTNode)input.LT(1);
                    	        	ELSE188=(IASTNode)Match(input,ELSE,FOLLOW_ELSE_in_caseExpr2104); 
                    	        		ELSE188_tree = (IASTNode)adaptor.DupNode(ELSE188);

                    	        		root_2 = (IASTNode)adaptor.BecomeRoot(ELSE188_tree, root_2);



                    	        	Match(input, Token.DOWN, null); 
                    	        	_last = (IASTNode)input.LT(1);
                    	        	PushFollow(FOLLOW_expr_in_caseExpr2106);
                    	        	expr189 = expr();
                    	        	state.followingStackPointer--;

                    	        	adaptor.AddChild(root_2, expr189.Tree);

                    	        	Match(input, Token.UP, null); adaptor.AddChild(root_1, root_2);_last = _save_last_2;
                    	        	}


                    	        }
                    	        break;

                    	}


                    	Match(input, Token.UP, null); adaptor.AddChild(root_0, root_1);_last = _save_last_1;
                    	}

                    	 _inCase = false; 

                    }
                    break;

            }
            	retval.Tree = (IASTNode)adaptor.RulePostProcessing(root_0);

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return retval;
    }
Exemplo n.º 3
0
    // $ANTLR start "caseExpr"
    // C:\\Users\\Steve\\Documents\\NHibernate\\nhibernate\\src\\NHibernate\\Hql\\Ast\\ANTLR\\HqlSqlWalker.g:387:1: caseExpr : ( ^( CASE ( ^( WHEN logicalExpr expr ) )+ ( ^( ELSE expr ) )? ) | ^( CASE2 expr ( ^( WHEN expr expr ) )+ ( ^( ELSE expr ) )? ) );
    public HqlSqlWalker.caseExpr_return caseExpr() // throws RecognitionException [1]
    {   
        HqlSqlWalker.caseExpr_return retval = new HqlSqlWalker.caseExpr_return();
        retval.Start = input.LT(1);

        IASTNode root_0 = null;

        IASTNode _first_0 = null;
        IASTNode _last = null;

        IASTNode CASE172 = null;
        IASTNode WHEN173 = null;
        IASTNode ELSE176 = null;
        IASTNode CASE2178 = null;
        IASTNode WHEN180 = null;
        IASTNode ELSE183 = null;
        HqlSqlWalker.logicalExpr_return logicalExpr174 = default(HqlSqlWalker.logicalExpr_return);

        HqlSqlWalker.expr_return expr175 = default(HqlSqlWalker.expr_return);

        HqlSqlWalker.expr_return expr177 = default(HqlSqlWalker.expr_return);

        HqlSqlWalker.expr_return expr179 = default(HqlSqlWalker.expr_return);

        HqlSqlWalker.expr_return expr181 = default(HqlSqlWalker.expr_return);

        HqlSqlWalker.expr_return expr182 = default(HqlSqlWalker.expr_return);

        HqlSqlWalker.expr_return expr184 = default(HqlSqlWalker.expr_return);


        IASTNode CASE172_tree=null;
        IASTNode WHEN173_tree=null;
        IASTNode ELSE176_tree=null;
        IASTNode CASE2178_tree=null;
        IASTNode WHEN180_tree=null;
        IASTNode ELSE183_tree=null;

        try 
    	{
            // C:\\Users\\Steve\\Documents\\NHibernate\\nhibernate\\src\\NHibernate\\Hql\\Ast\\ANTLR\\HqlSqlWalker.g:388:2: ( ^( CASE ( ^( WHEN logicalExpr expr ) )+ ( ^( ELSE expr ) )? ) | ^( CASE2 expr ( ^( WHEN expr expr ) )+ ( ^( ELSE expr ) )? ) )
            int alt54 = 2;
            int LA54_0 = input.LA(1);

            if ( (LA54_0 == CASE) )
            {
                alt54 = 1;
            }
            else if ( (LA54_0 == CASE2) )
            {
                alt54 = 2;
            }
            else 
            {
                NoViableAltException nvae_d54s0 =
                    new NoViableAltException("", 54, 0, input);

                throw nvae_d54s0;
            }
            switch (alt54) 
            {
                case 1 :
                    // C:\\Users\\Steve\\Documents\\NHibernate\\nhibernate\\src\\NHibernate\\Hql\\Ast\\ANTLR\\HqlSqlWalker.g:388:4: ^( CASE ( ^( WHEN logicalExpr expr ) )+ ( ^( ELSE expr ) )? )
                    {
                    	root_0 = (IASTNode)adaptor.GetNilNode();

                    	_last = (IASTNode)input.LT(1);
                    	{
                    	IASTNode _save_last_1 = _last;
                    	IASTNode _first_1 = null;
                    	IASTNode root_1 = (IASTNode)adaptor.GetNilNode();_last = (IASTNode)input.LT(1);
                    	CASE172=(IASTNode)Match(input,CASE,FOLLOW_CASE_in_caseExpr1973); 
                    		CASE172_tree = (IASTNode)adaptor.DupNode(CASE172);

                    		root_1 = (IASTNode)adaptor.BecomeRoot(CASE172_tree, root_1);


                    	 _inCase = true; 

                    	Match(input, Token.DOWN, null); 
                    	// C:\\Users\\Steve\\Documents\\NHibernate\\nhibernate\\src\\NHibernate\\Hql\\Ast\\ANTLR\\HqlSqlWalker.g:388:31: ( ^( WHEN logicalExpr expr ) )+
                    	int cnt50 = 0;
                    	do 
                    	{
                    	    int alt50 = 2;
                    	    int LA50_0 = input.LA(1);

                    	    if ( (LA50_0 == WHEN) )
                    	    {
                    	        alt50 = 1;
                    	    }


                    	    switch (alt50) 
                    		{
                    			case 1 :
                    			    // C:\\Users\\Steve\\Documents\\NHibernate\\nhibernate\\src\\NHibernate\\Hql\\Ast\\ANTLR\\HqlSqlWalker.g:388:32: ^( WHEN logicalExpr expr )
                    			    {
                    			    	_last = (IASTNode)input.LT(1);
                    			    	{
                    			    	IASTNode _save_last_2 = _last;
                    			    	IASTNode _first_2 = null;
                    			    	IASTNode root_2 = (IASTNode)adaptor.GetNilNode();_last = (IASTNode)input.LT(1);
                    			    	WHEN173=(IASTNode)Match(input,WHEN,FOLLOW_WHEN_in_caseExpr1979); 
                    			    		WHEN173_tree = (IASTNode)adaptor.DupNode(WHEN173);

                    			    		root_2 = (IASTNode)adaptor.BecomeRoot(WHEN173_tree, root_2);



                    			    	Match(input, Token.DOWN, null); 
                    			    	_last = (IASTNode)input.LT(1);
                    			    	PushFollow(FOLLOW_logicalExpr_in_caseExpr1981);
                    			    	logicalExpr174 = logicalExpr();
                    			    	state.followingStackPointer--;

                    			    	adaptor.AddChild(root_2, logicalExpr174.Tree);
                    			    	_last = (IASTNode)input.LT(1);
                    			    	PushFollow(FOLLOW_expr_in_caseExpr1983);
                    			    	expr175 = expr();
                    			    	state.followingStackPointer--;

                    			    	adaptor.AddChild(root_2, expr175.Tree);

                    			    	Match(input, Token.UP, null); adaptor.AddChild(root_1, root_2);_last = _save_last_2;
                    			    	}


                    			    }
                    			    break;

                    			default:
                    			    if ( cnt50 >= 1 ) goto loop50;
                    		            EarlyExitException eee50 =
                    		                new EarlyExitException(50, input);
                    		            throw eee50;
                    	    }
                    	    cnt50++;
                    	} while (true);

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

                    	// C:\\Users\\Steve\\Documents\\NHibernate\\nhibernate\\src\\NHibernate\\Hql\\Ast\\ANTLR\\HqlSqlWalker.g:388:59: ( ^( ELSE expr ) )?
                    	int alt51 = 2;
                    	int LA51_0 = input.LA(1);

                    	if ( (LA51_0 == ELSE) )
                    	{
                    	    alt51 = 1;
                    	}
                    	switch (alt51) 
                    	{
                    	    case 1 :
                    	        // C:\\Users\\Steve\\Documents\\NHibernate\\nhibernate\\src\\NHibernate\\Hql\\Ast\\ANTLR\\HqlSqlWalker.g:388:60: ^( ELSE expr )
                    	        {
                    	        	_last = (IASTNode)input.LT(1);
                    	        	{
                    	        	IASTNode _save_last_2 = _last;
                    	        	IASTNode _first_2 = null;
                    	        	IASTNode root_2 = (IASTNode)adaptor.GetNilNode();_last = (IASTNode)input.LT(1);
                    	        	ELSE176=(IASTNode)Match(input,ELSE,FOLLOW_ELSE_in_caseExpr1990); 
                    	        		ELSE176_tree = (IASTNode)adaptor.DupNode(ELSE176);

                    	        		root_2 = (IASTNode)adaptor.BecomeRoot(ELSE176_tree, root_2);



                    	        	Match(input, Token.DOWN, null); 
                    	        	_last = (IASTNode)input.LT(1);
                    	        	PushFollow(FOLLOW_expr_in_caseExpr1992);
                    	        	expr177 = expr();
                    	        	state.followingStackPointer--;

                    	        	adaptor.AddChild(root_2, expr177.Tree);

                    	        	Match(input, Token.UP, null); adaptor.AddChild(root_1, root_2);_last = _save_last_2;
                    	        	}


                    	        }
                    	        break;

                    	}


                    	Match(input, Token.UP, null); adaptor.AddChild(root_0, root_1);_last = _save_last_1;
                    	}

                    	 _inCase = false; 

                    }
                    break;
                case 2 :
                    // C:\\Users\\Steve\\Documents\\NHibernate\\nhibernate\\src\\NHibernate\\Hql\\Ast\\ANTLR\\HqlSqlWalker.g:389:4: ^( CASE2 expr ( ^( WHEN expr expr ) )+ ( ^( ELSE expr ) )? )
                    {
                    	root_0 = (IASTNode)adaptor.GetNilNode();

                    	_last = (IASTNode)input.LT(1);
                    	{
                    	IASTNode _save_last_1 = _last;
                    	IASTNode _first_1 = null;
                    	IASTNode root_1 = (IASTNode)adaptor.GetNilNode();_last = (IASTNode)input.LT(1);
                    	CASE2178=(IASTNode)Match(input,CASE2,FOLLOW_CASE2_in_caseExpr2004); 
                    		CASE2178_tree = (IASTNode)adaptor.DupNode(CASE2178);

                    		root_1 = (IASTNode)adaptor.BecomeRoot(CASE2178_tree, root_1);


                    	 _inCase = true; 

                    	Match(input, Token.DOWN, null); 
                    	_last = (IASTNode)input.LT(1);
                    	PushFollow(FOLLOW_expr_in_caseExpr2008);
                    	expr179 = expr();
                    	state.followingStackPointer--;

                    	adaptor.AddChild(root_1, expr179.Tree);
                    	// C:\\Users\\Steve\\Documents\\NHibernate\\nhibernate\\src\\NHibernate\\Hql\\Ast\\ANTLR\\HqlSqlWalker.g:389:37: ( ^( WHEN expr expr ) )+
                    	int cnt52 = 0;
                    	do 
                    	{
                    	    int alt52 = 2;
                    	    int LA52_0 = input.LA(1);

                    	    if ( (LA52_0 == WHEN) )
                    	    {
                    	        alt52 = 1;
                    	    }


                    	    switch (alt52) 
                    		{
                    			case 1 :
                    			    // C:\\Users\\Steve\\Documents\\NHibernate\\nhibernate\\src\\NHibernate\\Hql\\Ast\\ANTLR\\HqlSqlWalker.g:389:38: ^( WHEN expr expr )
                    			    {
                    			    	_last = (IASTNode)input.LT(1);
                    			    	{
                    			    	IASTNode _save_last_2 = _last;
                    			    	IASTNode _first_2 = null;
                    			    	IASTNode root_2 = (IASTNode)adaptor.GetNilNode();_last = (IASTNode)input.LT(1);
                    			    	WHEN180=(IASTNode)Match(input,WHEN,FOLLOW_WHEN_in_caseExpr2012); 
                    			    		WHEN180_tree = (IASTNode)adaptor.DupNode(WHEN180);

                    			    		root_2 = (IASTNode)adaptor.BecomeRoot(WHEN180_tree, root_2);



                    			    	Match(input, Token.DOWN, null); 
                    			    	_last = (IASTNode)input.LT(1);
                    			    	PushFollow(FOLLOW_expr_in_caseExpr2014);
                    			    	expr181 = expr();
                    			    	state.followingStackPointer--;

                    			    	adaptor.AddChild(root_2, expr181.Tree);
                    			    	_last = (IASTNode)input.LT(1);
                    			    	PushFollow(FOLLOW_expr_in_caseExpr2016);
                    			    	expr182 = expr();
                    			    	state.followingStackPointer--;

                    			    	adaptor.AddChild(root_2, expr182.Tree);

                    			    	Match(input, Token.UP, null); adaptor.AddChild(root_1, root_2);_last = _save_last_2;
                    			    	}


                    			    }
                    			    break;

                    			default:
                    			    if ( cnt52 >= 1 ) goto loop52;
                    		            EarlyExitException eee52 =
                    		                new EarlyExitException(52, input);
                    		            throw eee52;
                    	    }
                    	    cnt52++;
                    	} while (true);

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

                    	// C:\\Users\\Steve\\Documents\\NHibernate\\nhibernate\\src\\NHibernate\\Hql\\Ast\\ANTLR\\HqlSqlWalker.g:389:58: ( ^( ELSE expr ) )?
                    	int alt53 = 2;
                    	int LA53_0 = input.LA(1);

                    	if ( (LA53_0 == ELSE) )
                    	{
                    	    alt53 = 1;
                    	}
                    	switch (alt53) 
                    	{
                    	    case 1 :
                    	        // C:\\Users\\Steve\\Documents\\NHibernate\\nhibernate\\src\\NHibernate\\Hql\\Ast\\ANTLR\\HqlSqlWalker.g:389:59: ^( ELSE expr )
                    	        {
                    	        	_last = (IASTNode)input.LT(1);
                    	        	{
                    	        	IASTNode _save_last_2 = _last;
                    	        	IASTNode _first_2 = null;
                    	        	IASTNode root_2 = (IASTNode)adaptor.GetNilNode();_last = (IASTNode)input.LT(1);
                    	        	ELSE183=(IASTNode)Match(input,ELSE,FOLLOW_ELSE_in_caseExpr2023); 
                    	        		ELSE183_tree = (IASTNode)adaptor.DupNode(ELSE183);

                    	        		root_2 = (IASTNode)adaptor.BecomeRoot(ELSE183_tree, root_2);



                    	        	Match(input, Token.DOWN, null); 
                    	        	_last = (IASTNode)input.LT(1);
                    	        	PushFollow(FOLLOW_expr_in_caseExpr2025);
                    	        	expr184 = expr();
                    	        	state.followingStackPointer--;

                    	        	adaptor.AddChild(root_2, expr184.Tree);

                    	        	Match(input, Token.UP, null); adaptor.AddChild(root_1, root_2);_last = _save_last_2;
                    	        	}


                    	        }
                    	        break;

                    	}


                    	Match(input, Token.UP, null); adaptor.AddChild(root_0, root_1);_last = _save_last_1;
                    	}

                    	 _inCase = false; 

                    }
                    break;

            }
            	retval.Tree = (IASTNode)adaptor.RulePostProcessing(root_0);

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return retval;
    }
    // $ANTLR start "caseExpr"
    // HqlSqlWalker.g:403:1: caseExpr : ( ^( CASE ( ^( WHEN logicalExpr expr ) )+ ( ^( ELSE expr ) )? ) | ^( CASE2 expr ( ^( WHEN expr expr ) )+ ( ^( ELSE expr ) )? ) );
    public HqlSqlWalker.caseExpr_return caseExpr() // throws RecognitionException [1]
    {   
        HqlSqlWalker.caseExpr_return retval = new HqlSqlWalker.caseExpr_return();
        retval.Start = input.LT(1);

        IASTNode root_0 = null;

        IASTNode _first_0 = null;
        IASTNode _last = null;

        IASTNode CASE181 = null;
        IASTNode WHEN182 = null;
        IASTNode ELSE185 = null;
        IASTNode CASE2187 = null;
        IASTNode WHEN189 = null;
        IASTNode ELSE192 = null;
        HqlSqlWalker.logicalExpr_return logicalExpr183 = default(HqlSqlWalker.logicalExpr_return);

        HqlSqlWalker.expr_return expr184 = default(HqlSqlWalker.expr_return);

        HqlSqlWalker.expr_return expr186 = default(HqlSqlWalker.expr_return);

        HqlSqlWalker.expr_return expr188 = default(HqlSqlWalker.expr_return);

        HqlSqlWalker.expr_return expr190 = default(HqlSqlWalker.expr_return);

        HqlSqlWalker.expr_return expr191 = default(HqlSqlWalker.expr_return);

        HqlSqlWalker.expr_return expr193 = default(HqlSqlWalker.expr_return);


        IASTNode CASE181_tree=null;
        IASTNode WHEN182_tree=null;
        IASTNode ELSE185_tree=null;
        IASTNode CASE2187_tree=null;
        IASTNode WHEN189_tree=null;
        IASTNode ELSE192_tree=null;

        try 
    	{
            // HqlSqlWalker.g:404:2: ( ^( CASE ( ^( WHEN logicalExpr expr ) )+ ( ^( ELSE expr ) )? ) | ^( CASE2 expr ( ^( WHEN expr expr ) )+ ( ^( ELSE expr ) )? ) )
            int alt60 = 2;
            int LA60_0 = input.LA(1);

            if ( (LA60_0 == CASE) )
            {
                alt60 = 1;
            }
            else if ( (LA60_0 == CASE2) )
            {
                alt60 = 2;
            }
            else 
            {
                NoViableAltException nvae_d60s0 =
                    new NoViableAltException("", 60, 0, input);

                throw nvae_d60s0;
            }
            switch (alt60) 
            {
                case 1 :
                    // HqlSqlWalker.g:404:4: ^( CASE ( ^( WHEN logicalExpr expr ) )+ ( ^( ELSE expr ) )? )
                    {
                    	root_0 = (IASTNode)adaptor.GetNilNode();

                    	_last = (IASTNode)input.LT(1);
                    	{
                    	IASTNode _save_last_1 = _last;
                    	IASTNode _first_1 = null;
                    	IASTNode root_1 = (IASTNode)adaptor.GetNilNode();_last = (IASTNode)input.LT(1);
                    	CASE181=(IASTNode)Match(input,CASE,FOLLOW_CASE_in_caseExpr2082); 
                    		CASE181_tree = (IASTNode)adaptor.DupNode(CASE181);

                    		root_1 = (IASTNode)adaptor.BecomeRoot(CASE181_tree, root_1);


                    	 _inCase = true; 

                    	Match(input, Token.DOWN, null); 
                    	// HqlSqlWalker.g:404:31: ( ^( WHEN logicalExpr expr ) )+
                    	int cnt56 = 0;
                    	do 
                    	{
                    	    int alt56 = 2;
                    	    int LA56_0 = input.LA(1);

                    	    if ( (LA56_0 == WHEN) )
                    	    {
                    	        alt56 = 1;
                    	    }


                    	    switch (alt56) 
                    		{
                    			case 1 :
                    			    // HqlSqlWalker.g:404:32: ^( WHEN logicalExpr expr )
                    			    {
                    			    	_last = (IASTNode)input.LT(1);
                    			    	{
                    			    	IASTNode _save_last_2 = _last;
                    			    	IASTNode _first_2 = null;
                    			    	IASTNode root_2 = (IASTNode)adaptor.GetNilNode();_last = (IASTNode)input.LT(1);
                    			    	WHEN182=(IASTNode)Match(input,WHEN,FOLLOW_WHEN_in_caseExpr2088); 
                    			    		WHEN182_tree = (IASTNode)adaptor.DupNode(WHEN182);

                    			    		root_2 = (IASTNode)adaptor.BecomeRoot(WHEN182_tree, root_2);



                    			    	Match(input, Token.DOWN, null); 
                    			    	_last = (IASTNode)input.LT(1);
                    			    	PushFollow(FOLLOW_logicalExpr_in_caseExpr2090);
                    			    	logicalExpr183 = logicalExpr();
                    			    	state.followingStackPointer--;

                    			    	adaptor.AddChild(root_2, logicalExpr183.Tree);
                    			    	_last = (IASTNode)input.LT(1);
                    			    	PushFollow(FOLLOW_expr_in_caseExpr2092);
                    			    	expr184 = expr();
                    			    	state.followingStackPointer--;

                    			    	adaptor.AddChild(root_2, expr184.Tree);

                    			    	Match(input, Token.UP, null); adaptor.AddChild(root_1, root_2);_last = _save_last_2;
                    			    	}


                    			    }
                    			    break;

                    			default:
                    			    if ( cnt56 >= 1 ) goto loop56;
                    		            EarlyExitException eee56 =
                    		                new EarlyExitException(56, input);
                    		            throw eee56;
                    	    }
                    	    cnt56++;
                    	} while (true);

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

                    	// HqlSqlWalker.g:404:59: ( ^( ELSE expr ) )?
                    	int alt57 = 2;
                    	int LA57_0 = input.LA(1);

                    	if ( (LA57_0 == ELSE) )
                    	{
                    	    alt57 = 1;
                    	}
                    	switch (alt57) 
                    	{
                    	    case 1 :
                    	        // HqlSqlWalker.g:404:60: ^( ELSE expr )
                    	        {
                    	        	_last = (IASTNode)input.LT(1);
                    	        	{
                    	        	IASTNode _save_last_2 = _last;
                    	        	IASTNode _first_2 = null;
                    	        	IASTNode root_2 = (IASTNode)adaptor.GetNilNode();_last = (IASTNode)input.LT(1);
                    	        	ELSE185=(IASTNode)Match(input,ELSE,FOLLOW_ELSE_in_caseExpr2099); 
                    	        		ELSE185_tree = (IASTNode)adaptor.DupNode(ELSE185);

                    	        		root_2 = (IASTNode)adaptor.BecomeRoot(ELSE185_tree, root_2);



                    	        	Match(input, Token.DOWN, null); 
                    	        	_last = (IASTNode)input.LT(1);
                    	        	PushFollow(FOLLOW_expr_in_caseExpr2101);
                    	        	expr186 = expr();
                    	        	state.followingStackPointer--;

                    	        	adaptor.AddChild(root_2, expr186.Tree);

                    	        	Match(input, Token.UP, null); adaptor.AddChild(root_1, root_2);_last = _save_last_2;
                    	        	}


                    	        }
                    	        break;

                    	}


                    	Match(input, Token.UP, null); adaptor.AddChild(root_0, root_1);_last = _save_last_1;
                    	}

                    	 _inCase = false; 

                    }
                    break;
                case 2 :
                    // HqlSqlWalker.g:405:4: ^( CASE2 expr ( ^( WHEN expr expr ) )+ ( ^( ELSE expr ) )? )
                    {
                    	root_0 = (IASTNode)adaptor.GetNilNode();

                    	_last = (IASTNode)input.LT(1);
                    	{
                    	IASTNode _save_last_1 = _last;
                    	IASTNode _first_1 = null;
                    	IASTNode root_1 = (IASTNode)adaptor.GetNilNode();_last = (IASTNode)input.LT(1);
                    	CASE2187=(IASTNode)Match(input,CASE2,FOLLOW_CASE2_in_caseExpr2113); 
                    		CASE2187_tree = (IASTNode)adaptor.DupNode(CASE2187);

                    		root_1 = (IASTNode)adaptor.BecomeRoot(CASE2187_tree, root_1);


                    	 _inCase = true; 

                    	Match(input, Token.DOWN, null); 
                    	_last = (IASTNode)input.LT(1);
                    	PushFollow(FOLLOW_expr_in_caseExpr2117);
                    	expr188 = expr();
                    	state.followingStackPointer--;

                    	adaptor.AddChild(root_1, expr188.Tree);
                    	// HqlSqlWalker.g:405:37: ( ^( WHEN expr expr ) )+
                    	int cnt58 = 0;
                    	do 
                    	{
                    	    int alt58 = 2;
                    	    int LA58_0 = input.LA(1);

                    	    if ( (LA58_0 == WHEN) )
                    	    {
                    	        alt58 = 1;
                    	    }


                    	    switch (alt58) 
                    		{
                    			case 1 :
                    			    // HqlSqlWalker.g:405:38: ^( WHEN expr expr )
                    			    {
                    			    	_last = (IASTNode)input.LT(1);
                    			    	{
                    			    	IASTNode _save_last_2 = _last;
                    			    	IASTNode _first_2 = null;
                    			    	IASTNode root_2 = (IASTNode)adaptor.GetNilNode();_last = (IASTNode)input.LT(1);
                    			    	WHEN189=(IASTNode)Match(input,WHEN,FOLLOW_WHEN_in_caseExpr2121); 
                    			    		WHEN189_tree = (IASTNode)adaptor.DupNode(WHEN189);

                    			    		root_2 = (IASTNode)adaptor.BecomeRoot(WHEN189_tree, root_2);



                    			    	Match(input, Token.DOWN, null); 
                    			    	_last = (IASTNode)input.LT(1);
                    			    	PushFollow(FOLLOW_expr_in_caseExpr2123);
                    			    	expr190 = expr();
                    			    	state.followingStackPointer--;

                    			    	adaptor.AddChild(root_2, expr190.Tree);
                    			    	_last = (IASTNode)input.LT(1);
                    			    	PushFollow(FOLLOW_expr_in_caseExpr2125);
                    			    	expr191 = expr();
                    			    	state.followingStackPointer--;

                    			    	adaptor.AddChild(root_2, expr191.Tree);

                    			    	Match(input, Token.UP, null); adaptor.AddChild(root_1, root_2);_last = _save_last_2;
                    			    	}


                    			    }
                    			    break;

                    			default:
                    			    if ( cnt58 >= 1 ) goto loop58;
                    		            EarlyExitException eee58 =
                    		                new EarlyExitException(58, input);
                    		            throw eee58;
                    	    }
                    	    cnt58++;
                    	} while (true);

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

                    	// HqlSqlWalker.g:405:58: ( ^( ELSE expr ) )?
                    	int alt59 = 2;
                    	int LA59_0 = input.LA(1);

                    	if ( (LA59_0 == ELSE) )
                    	{
                    	    alt59 = 1;
                    	}
                    	switch (alt59) 
                    	{
                    	    case 1 :
                    	        // HqlSqlWalker.g:405:59: ^( ELSE expr )
                    	        {
                    	        	_last = (IASTNode)input.LT(1);
                    	        	{
                    	        	IASTNode _save_last_2 = _last;
                    	        	IASTNode _first_2 = null;
                    	        	IASTNode root_2 = (IASTNode)adaptor.GetNilNode();_last = (IASTNode)input.LT(1);
                    	        	ELSE192=(IASTNode)Match(input,ELSE,FOLLOW_ELSE_in_caseExpr2132); 
                    	        		ELSE192_tree = (IASTNode)adaptor.DupNode(ELSE192);

                    	        		root_2 = (IASTNode)adaptor.BecomeRoot(ELSE192_tree, root_2);



                    	        	Match(input, Token.DOWN, null); 
                    	        	_last = (IASTNode)input.LT(1);
                    	        	PushFollow(FOLLOW_expr_in_caseExpr2134);
                    	        	expr193 = expr();
                    	        	state.followingStackPointer--;

                    	        	adaptor.AddChild(root_2, expr193.Tree);

                    	        	Match(input, Token.UP, null); adaptor.AddChild(root_1, root_2);_last = _save_last_2;
                    	        	}


                    	        }
                    	        break;

                    	}


                    	Match(input, Token.UP, null); adaptor.AddChild(root_0, root_1);_last = _save_last_1;
                    	}

                    	 _inCase = false; 

                    }
                    break;

            }
            	retval.Tree = (IASTNode)adaptor.RulePostProcessing(root_0);

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return retval;
    }