Ejemplo n.º 1
0
    // $ANTLR start "primaryExpression"
    // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:537:1: primaryExpression : ( identPrimary ( options {greedy=true; } : DOT 'class' )? | constant | COLON identifier | OPEN ( expressionOrVector | subQuery ) CLOSE | PARAM ( NUM_INT )? );
    public HqlParser.primaryExpression_return primaryExpression() // throws RecognitionException [1]
    {   
        HqlParser.primaryExpression_return retval = new HqlParser.primaryExpression_return();
        retval.Start = input.LT(1);

        IASTNode root_0 = null;

        IToken DOT230 = null;
        IToken string_literal231 = null;
        IToken COLON233 = null;
        IToken OPEN235 = null;
        IToken CLOSE238 = null;
        IToken PARAM239 = null;
        IToken NUM_INT240 = null;
        HqlParser.identPrimary_return identPrimary229 = default(HqlParser.identPrimary_return);

        HqlParser.constant_return constant232 = default(HqlParser.constant_return);

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

        HqlParser.expressionOrVector_return expressionOrVector236 = default(HqlParser.expressionOrVector_return);

        HqlParser.subQuery_return subQuery237 = default(HqlParser.subQuery_return);


        IASTNode DOT230_tree=null;
        IASTNode string_literal231_tree=null;
        IASTNode COLON233_tree=null;
        IASTNode OPEN235_tree=null;
        IASTNode CLOSE238_tree=null;
        IASTNode PARAM239_tree=null;
        IASTNode NUM_INT240_tree=null;

        try 
    	{
            // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:538:2: ( identPrimary ( options {greedy=true; } : DOT 'class' )? | constant | COLON identifier | OPEN ( expressionOrVector | subQuery ) CLOSE | PARAM ( NUM_INT )? )
            int alt81 = 5;
            switch ( input.LA(1) ) 
            {
            case AVG:
            case COUNT:
            case ELEMENTS:
            case INDICES:
            case MAX:
            case MIN:
            case SUM:
            case IDENT:
            	{
                alt81 = 1;
                }
                break;
            case FALSE:
            case NULL:
            case TRUE:
            case EMPTY:
            case NUM_INT:
            case NUM_DOUBLE:
            case NUM_FLOAT:
            case NUM_LONG:
            case QUOTED_String:
            	{
                alt81 = 2;
                }
                break;
            case COLON:
            	{
                alt81 = 3;
                }
                break;
            case OPEN:
            	{
                alt81 = 4;
                }
                break;
            case PARAM:
            	{
                alt81 = 5;
                }
                break;
            	default:
            	    NoViableAltException nvae_d81s0 =
            	        new NoViableAltException("", 81, 0, input);

            	    throw nvae_d81s0;
            }

            switch (alt81) 
            {
                case 1 :
                    // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:538:6: identPrimary ( options {greedy=true; } : DOT 'class' )?
                    {
                    	root_0 = (IASTNode)adaptor.GetNilNode();

                    	PushFollow(FOLLOW_identPrimary_in_primaryExpression2775);
                    	identPrimary229 = identPrimary();
                    	state.followingStackPointer--;

                    	adaptor.AddChild(root_0, identPrimary229.Tree);
                    	// /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:538:19: ( options {greedy=true; } : DOT 'class' )?
                    	int alt78 = 2;
                    	int LA78_0 = input.LA(1);

                    	if ( (LA78_0 == DOT) )
                    	{
                    	    int LA78_1 = input.LA(2);

                    	    if ( (LA78_1 == CLASS) )
                    	    {
                    	        alt78 = 1;
                    	    }
                    	}
                    	switch (alt78) 
                    	{
                    	    case 1 :
                    	        // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:538:46: DOT 'class'
                    	        {
                    	        	DOT230=(IToken)Match(input,DOT,FOLLOW_DOT_in_primaryExpression2788); 
                    	        		DOT230_tree = (IASTNode)adaptor.Create(DOT230);
                    	        		root_0 = (IASTNode)adaptor.BecomeRoot(DOT230_tree, root_0);

                    	        	string_literal231=(IToken)Match(input,CLASS,FOLLOW_CLASS_in_primaryExpression2791); 
                    	        		string_literal231_tree = (IASTNode)adaptor.Create(string_literal231);
                    	        		adaptor.AddChild(root_0, string_literal231_tree);


                    	        }
                    	        break;

                    	}


                    }
                    break;
                case 2 :
                    // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:539:6: constant
                    {
                    	root_0 = (IASTNode)adaptor.GetNilNode();

                    	PushFollow(FOLLOW_constant_in_primaryExpression2801);
                    	constant232 = constant();
                    	state.followingStackPointer--;

                    	adaptor.AddChild(root_0, constant232.Tree);

                    }
                    break;
                case 3 :
                    // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:540:6: COLON identifier
                    {
                    	root_0 = (IASTNode)adaptor.GetNilNode();

                    	COLON233=(IToken)Match(input,COLON,FOLLOW_COLON_in_primaryExpression2808); 
                    		COLON233_tree = (IASTNode)adaptor.Create(COLON233);
                    		root_0 = (IASTNode)adaptor.BecomeRoot(COLON233_tree, root_0);

                    	PushFollow(FOLLOW_identifier_in_primaryExpression2811);
                    	identifier234 = identifier();
                    	state.followingStackPointer--;

                    	adaptor.AddChild(root_0, identifier234.Tree);

                    }
                    break;
                case 4 :
                    // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:542:6: OPEN ( expressionOrVector | subQuery ) CLOSE
                    {
                    	root_0 = (IASTNode)adaptor.GetNilNode();

                    	OPEN235=(IToken)Match(input,OPEN,FOLLOW_OPEN_in_primaryExpression2820); 
                    	// /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:542:12: ( expressionOrVector | subQuery )
                    	int alt79 = 2;
                    	int LA79_0 = input.LA(1);

                    	if ( ((LA79_0 >= ALL && LA79_0 <= ANY) || LA79_0 == AVG || LA79_0 == COUNT || LA79_0 == ELEMENTS || (LA79_0 >= EXISTS && LA79_0 <= FALSE) || LA79_0 == INDICES || (LA79_0 >= MAX && LA79_0 <= MIN) || (LA79_0 >= NOT && LA79_0 <= NULL) || (LA79_0 >= SOME && LA79_0 <= TRUE) || LA79_0 == CASE || LA79_0 == EMPTY || (LA79_0 >= NUM_INT && LA79_0 <= NUM_LONG) || LA79_0 == OPEN || LA79_0 == BNOT || (LA79_0 >= PLUS && LA79_0 <= MINUS) || (LA79_0 >= COLON && LA79_0 <= IDENT)) )
                    	{
                    	    alt79 = 1;
                    	}
                    	else if ( (LA79_0 == EOF || LA79_0 == FROM || LA79_0 == GROUP || LA79_0 == ORDER || LA79_0 == SELECT || LA79_0 == UNION || LA79_0 == WHERE || LA79_0 == CLOSE) )
                    	{
                    	    alt79 = 2;
                    	}
                    	else 
                    	{
                    	    NoViableAltException nvae_d79s0 =
                    	        new NoViableAltException("", 79, 0, input);

                    	    throw nvae_d79s0;
                    	}
                    	switch (alt79) 
                    	{
                    	    case 1 :
                    	        // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:542:13: expressionOrVector
                    	        {
                    	        	PushFollow(FOLLOW_expressionOrVector_in_primaryExpression2824);
                    	        	expressionOrVector236 = expressionOrVector();
                    	        	state.followingStackPointer--;

                    	        	adaptor.AddChild(root_0, expressionOrVector236.Tree);

                    	        }
                    	        break;
                    	    case 2 :
                    	        // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:542:34: subQuery
                    	        {
                    	        	PushFollow(FOLLOW_subQuery_in_primaryExpression2828);
                    	        	subQuery237 = subQuery();
                    	        	state.followingStackPointer--;

                    	        	adaptor.AddChild(root_0, subQuery237.Tree);

                    	        }
                    	        break;

                    	}

                    	CLOSE238=(IToken)Match(input,CLOSE,FOLLOW_CLOSE_in_primaryExpression2831); 

                    }
                    break;
                case 5 :
                    // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:543:6: PARAM ( NUM_INT )?
                    {
                    	root_0 = (IASTNode)adaptor.GetNilNode();

                    	PARAM239=(IToken)Match(input,PARAM,FOLLOW_PARAM_in_primaryExpression2839); 
                    		PARAM239_tree = (IASTNode)adaptor.Create(PARAM239);
                    		root_0 = (IASTNode)adaptor.BecomeRoot(PARAM239_tree, root_0);

                    	// /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:543:13: ( NUM_INT )?
                    	int alt80 = 2;
                    	int LA80_0 = input.LA(1);

                    	if ( (LA80_0 == NUM_INT) )
                    	{
                    	    alt80 = 1;
                    	}
                    	switch (alt80) 
                    	{
                    	    case 1 :
                    	        // /Users/Steve/Projects/NHibernate/Branches/2.1.x/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Hql.g:543:14: NUM_INT
                    	        {
                    	        	NUM_INT240=(IToken)Match(input,NUM_INT,FOLLOW_NUM_INT_in_primaryExpression2843); 
                    	        		NUM_INT240_tree = (IASTNode)adaptor.Create(NUM_INT240);
                    	        		adaptor.AddChild(root_0, NUM_INT240_tree);


                    	        }
                    	        break;

                    	}


                    }
                    break;

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

            	retval.Tree = (IASTNode)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);
        }
        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 "primaryExpression"
    // Hql.g:555:1: primaryExpression : ( identPrimary ( options {greedy=true; } : DOT 'class' )? | constant | COLON identifier | OPEN ( expressionOrVector | subQuery ) CLOSE | PARAM ( NUM_INT )? );
    public HqlParser.primaryExpression_return primaryExpression() // throws RecognitionException [1]
    {   
        HqlParser.primaryExpression_return retval = new HqlParser.primaryExpression_return();
        retval.Start = input.LT(1);

        IASTNode root_0 = null;

        IToken DOT243 = null;
        IToken string_literal244 = null;
        IToken COLON246 = null;
        IToken OPEN248 = null;
        IToken CLOSE251 = null;
        IToken PARAM252 = null;
        IToken NUM_INT253 = null;
        HqlParser.identPrimary_return identPrimary242 = default(HqlParser.identPrimary_return);

        HqlParser.constant_return constant245 = default(HqlParser.constant_return);

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

        HqlParser.expressionOrVector_return expressionOrVector249 = default(HqlParser.expressionOrVector_return);

        HqlParser.subQuery_return subQuery250 = default(HqlParser.subQuery_return);


        IASTNode DOT243_tree=null;
        IASTNode string_literal244_tree=null;
        IASTNode COLON246_tree=null;
        IASTNode OPEN248_tree=null;
        IASTNode CLOSE251_tree=null;
        IASTNode PARAM252_tree=null;
        IASTNode NUM_INT253_tree=null;

        try 
    	{
            // Hql.g:556:2: ( identPrimary ( options {greedy=true; } : DOT 'class' )? | constant | COLON identifier | OPEN ( expressionOrVector | subQuery ) CLOSE | PARAM ( NUM_INT )? )
            int alt87 = 5;
            switch ( input.LA(1) ) 
            {
            case AVG:
            case COUNT:
            case ELEMENTS:
            case INDICES:
            case MAX:
            case MIN:
            case SUM:
            case IDENT:
            	{
                alt87 = 1;
                }
                break;
            case FALSE:
            case NULL:
            case TRUE:
            case EMPTY:
            case NUM_INT:
            case NUM_DOUBLE:
            case NUM_DECIMAL:
            case NUM_FLOAT:
            case NUM_LONG:
            case QUOTED_String:
            	{
                alt87 = 2;
                }
                break;
            case COLON:
            	{
                alt87 = 3;
                }
                break;
            case OPEN:
            	{
                alt87 = 4;
                }
                break;
            case PARAM:
            	{
                alt87 = 5;
                }
                break;
            	default:
            	    NoViableAltException nvae_d87s0 =
            	        new NoViableAltException("", 87, 0, input);

            	    throw nvae_d87s0;
            }

            switch (alt87) 
            {
                case 1 :
                    // Hql.g:556:6: identPrimary ( options {greedy=true; } : DOT 'class' )?
                    {
                    	root_0 = (IASTNode)adaptor.GetNilNode();

                    	PushFollow(FOLLOW_identPrimary_in_primaryExpression2874);
                    	identPrimary242 = identPrimary();
                    	state.followingStackPointer--;

                    	adaptor.AddChild(root_0, identPrimary242.Tree);
                    	// Hql.g:556:19: ( options {greedy=true; } : DOT 'class' )?
                    	int alt84 = 2;
                    	int LA84_0 = input.LA(1);

                    	if ( (LA84_0 == DOT) )
                    	{
                    	    int LA84_1 = input.LA(2);

                    	    if ( (LA84_1 == CLASS) )
                    	    {
                    	        alt84 = 1;
                    	    }
                    	}
                    	switch (alt84) 
                    	{
                    	    case 1 :
                    	        // Hql.g:556:46: DOT 'class'
                    	        {
                    	        	DOT243=(IToken)Match(input,DOT,FOLLOW_DOT_in_primaryExpression2887); 
                    	        		DOT243_tree = (IASTNode)adaptor.Create(DOT243);
                    	        		root_0 = (IASTNode)adaptor.BecomeRoot(DOT243_tree, root_0);

                    	        	string_literal244=(IToken)Match(input,CLASS,FOLLOW_CLASS_in_primaryExpression2890); 
                    	        		string_literal244_tree = (IASTNode)adaptor.Create(string_literal244);
                    	        		adaptor.AddChild(root_0, string_literal244_tree);


                    	        }
                    	        break;

                    	}


                    }
                    break;
                case 2 :
                    // Hql.g:557:6: constant
                    {
                    	root_0 = (IASTNode)adaptor.GetNilNode();

                    	PushFollow(FOLLOW_constant_in_primaryExpression2900);
                    	constant245 = constant();
                    	state.followingStackPointer--;

                    	adaptor.AddChild(root_0, constant245.Tree);

                    }
                    break;
                case 3 :
                    // Hql.g:558:6: COLON identifier
                    {
                    	root_0 = (IASTNode)adaptor.GetNilNode();

                    	COLON246=(IToken)Match(input,COLON,FOLLOW_COLON_in_primaryExpression2907); 
                    		COLON246_tree = (IASTNode)adaptor.Create(COLON246);
                    		root_0 = (IASTNode)adaptor.BecomeRoot(COLON246_tree, root_0);

                    	PushFollow(FOLLOW_identifier_in_primaryExpression2910);
                    	identifier247 = identifier();
                    	state.followingStackPointer--;

                    	adaptor.AddChild(root_0, identifier247.Tree);

                    }
                    break;
                case 4 :
                    // Hql.g:560:6: OPEN ( expressionOrVector | subQuery ) CLOSE
                    {
                    	root_0 = (IASTNode)adaptor.GetNilNode();

                    	OPEN248=(IToken)Match(input,OPEN,FOLLOW_OPEN_in_primaryExpression2919); 
                    	// Hql.g:560:12: ( expressionOrVector | subQuery )
                    	int alt85 = 2;
                    	int LA85_0 = input.LA(1);

                    	if ( ((LA85_0 >= ALL && LA85_0 <= ANY) || LA85_0 == AVG || LA85_0 == COUNT || LA85_0 == ELEMENTS || (LA85_0 >= EXISTS && LA85_0 <= FALSE) || LA85_0 == INDICES || (LA85_0 >= MAX && LA85_0 <= MIN) || (LA85_0 >= NOT && LA85_0 <= NULL) || (LA85_0 >= SOME && LA85_0 <= SUM) || LA85_0 == TRUE || LA85_0 == CASE || LA85_0 == EMPTY || (LA85_0 >= NUM_INT && LA85_0 <= NUM_LONG) || LA85_0 == OPEN || (LA85_0 >= COLON && LA85_0 <= PARAM) || LA85_0 == BNOT || (LA85_0 >= PLUS && LA85_0 <= MINUS) || (LA85_0 >= QUOTED_String && LA85_0 <= IDENT)) )
                    	{
                    	    alt85 = 1;
                    	}
                    	else if ( (LA85_0 == EOF || LA85_0 == FROM || (LA85_0 >= GROUP && LA85_0 <= HAVING) || LA85_0 == ORDER || LA85_0 == SELECT || LA85_0 == SKIP || LA85_0 == TAKE || LA85_0 == UNION || LA85_0 == WHERE || LA85_0 == CLOSE) )
                    	{
                    	    alt85 = 2;
                    	}
                    	else 
                    	{
                    	    NoViableAltException nvae_d85s0 =
                    	        new NoViableAltException("", 85, 0, input);

                    	    throw nvae_d85s0;
                    	}
                    	switch (alt85) 
                    	{
                    	    case 1 :
                    	        // Hql.g:560:13: expressionOrVector
                    	        {
                    	        	PushFollow(FOLLOW_expressionOrVector_in_primaryExpression2923);
                    	        	expressionOrVector249 = expressionOrVector();
                    	        	state.followingStackPointer--;

                    	        	adaptor.AddChild(root_0, expressionOrVector249.Tree);

                    	        }
                    	        break;
                    	    case 2 :
                    	        // Hql.g:560:34: subQuery
                    	        {
                    	        	PushFollow(FOLLOW_subQuery_in_primaryExpression2927);
                    	        	subQuery250 = subQuery();
                    	        	state.followingStackPointer--;

                    	        	adaptor.AddChild(root_0, subQuery250.Tree);

                    	        }
                    	        break;

                    	}

                    	CLOSE251=(IToken)Match(input,CLOSE,FOLLOW_CLOSE_in_primaryExpression2930); 

                    }
                    break;
                case 5 :
                    // Hql.g:561:6: PARAM ( NUM_INT )?
                    {
                    	root_0 = (IASTNode)adaptor.GetNilNode();

                    	PARAM252=(IToken)Match(input,PARAM,FOLLOW_PARAM_in_primaryExpression2938); 
                    		PARAM252_tree = (IASTNode)adaptor.Create(PARAM252);
                    		root_0 = (IASTNode)adaptor.BecomeRoot(PARAM252_tree, root_0);

                    	// Hql.g:561:13: ( NUM_INT )?
                    	int alt86 = 2;
                    	int LA86_0 = input.LA(1);

                    	if ( (LA86_0 == NUM_INT) )
                    	{
                    	    alt86 = 1;
                    	}
                    	switch (alt86) 
                    	{
                    	    case 1 :
                    	        // Hql.g:561:14: NUM_INT
                    	        {
                    	        	NUM_INT253=(IToken)Match(input,NUM_INT,FOLLOW_NUM_INT_in_primaryExpression2942); 
                    	        		NUM_INT253_tree = (IASTNode)adaptor.Create(NUM_INT253);
                    	        		adaptor.AddChild(root_0, NUM_INT253_tree);


                    	        }
                    	        break;

                    	}


                    }
                    break;

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

            	retval.Tree = (IASTNode)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);
        }
        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;
    }