Beispiel #1
0
    // $ANTLR start "relationalExpression"
    // AS3_ex.g3:2310:1: relationalExpression : shiftExpression ( (g= GT (assign= ASSIGN )? | eq= ( IN | LT | LTE | INSTANCEOF | IS | AS ) ) shiftExpression )* ;
    public AS3_exParser.relationalExpression_return relationalExpression() // throws RecognitionException [1]
    {   
        AS3_exParser.relationalExpression_return retval = new AS3_exParser.relationalExpression_return();
        retval.Start = input.LT(1);
        int relationalExpression_StartIndex = input.Index();
        object root_0 = null;

        IToken g = null;
        IToken assign = null;
        IToken eq = null;
        AS3_exParser.shiftExpression_return shiftExpression285 = null;

        AS3_exParser.shiftExpression_return shiftExpression286 = null;


        object g_tree=null;
        object assign_tree=null;
        object eq_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 120) ) 
    	    {
    	    	return retval; 
    	    }
            // AS3_ex.g3:2311:5: ( shiftExpression ( (g= GT (assign= ASSIGN )? | eq= ( IN | LT | LTE | INSTANCEOF | IS | AS ) ) shiftExpression )* )
            // AS3_ex.g3:2311:9: shiftExpression ( (g= GT (assign= ASSIGN )? | eq= ( IN | LT | LTE | INSTANCEOF | IS | AS ) ) shiftExpression )*
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_shiftExpression_in_relationalExpression11132);
            	shiftExpression285 = shiftExpression();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, shiftExpression285.Tree);
            	// AS3_ex.g3:2312:6: ( (g= GT (assign= ASSIGN )? | eq= ( IN | LT | LTE | INSTANCEOF | IS | AS ) ) shiftExpression )*
            	do 
            	{
            	    int alt133 = 2;
            	    alt133 = dfa133.Predict(input);
            	    switch (alt133) 
            		{
            			case 1 :
            			    // AS3_ex.g3:2313:7: (g= GT (assign= ASSIGN )? | eq= ( IN | LT | LTE | INSTANCEOF | IS | AS ) ) shiftExpression
            			    {
            			    	// AS3_ex.g3:2313:7: (g= GT (assign= ASSIGN )? | eq= ( IN | LT | LTE | INSTANCEOF | IS | AS ) )
            			    	int alt132 = 2;
            			    	int LA132_0 = input.LA(1);

            			    	if ( (LA132_0 == GT) )
            			    	{
            			    	    alt132 = 1;
            			    	}
            			    	else if ( (LA132_0 == AS || (LA132_0 >= IN && LA132_0 <= INSTANCEOF) || LA132_0 == IS || LA132_0 == LT || LA132_0 == LTE) )
            			    	{
            			    	    alt132 = 2;
            			    	}
            			    	else 
            			    	{
            			    	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            			    	    NoViableAltException nvae_d132s0 =
            			    	        new NoViableAltException("", 132, 0, input);

            			    	    throw nvae_d132s0;
            			    	}
            			    	switch (alt132) 
            			    	{
            			    	    case 1 :
            			    	        // AS3_ex.g3:2313:9: g= GT (assign= ASSIGN )?
            			    	        {
            			    	        	g=(IToken)Match(input,GT,FOLLOW_GT_in_relationalExpression11152); if (state.failed) return retval;
            			    	        	if ( state.backtracking == 0 )
            			    	        	{g_tree = (object)adaptor.Create(g);
            			    	        		adaptor.AddChild(root_0, g_tree);
            			    	        	}
            			    	        	// AS3_ex.g3:2313:14: (assign= ASSIGN )?
            			    	        	int alt131 = 2;
            			    	        	int LA131_0 = input.LA(1);

            			    	        	if ( (LA131_0 == ASSIGN) )
            			    	        	{
            			    	        	    alt131 = 1;
            			    	        	}
            			    	        	switch (alt131) 
            			    	        	{
            			    	        	    case 1 :
            			    	        	        // AS3_ex.g3:2313:15: assign= ASSIGN
            			    	        	        {
            			    	        	        	assign=(IToken)Match(input,ASSIGN,FOLLOW_ASSIGN_in_relationalExpression11157); if (state.failed) return retval;
            			    	        	        	if ( state.backtracking == 0 )
            			    	        	        	{assign_tree = (object)adaptor.Create(assign);
            			    	        	        		adaptor.AddChild(root_0, assign_tree);
            			    	        	        	}

            			    	        	        }
            			    	        	        break;

            			    	        	}

            			    	        	if ( state.backtracking == 0 ) 
            			    	        	{
            			    	        	  if (assign!=null)
            			    	        	  		         {
            			    	        	  		         	g.Text = ">=";
            			    	        	  		         	g.Type = GTE;
            			    	        	  		         }
            			    	        	  		         IndentEmit((CommonToken)g);
            			    	        	  		        
            			    	        	}

            			    	        }
            			    	        break;
            			    	    case 2 :
            			    	        // AS3_ex.g3:2321:14: eq= ( IN | LT | LTE | INSTANCEOF | IS | AS )
            			    	        {
            			    	        	eq = (IToken)input.LT(1);
            			    	        	if ( input.LA(1) == AS || (input.LA(1) >= IN && input.LA(1) <= INSTANCEOF) || input.LA(1) == IS || input.LA(1) == LT || input.LA(1) == LTE ) 
            			    	        	{
            			    	        	    input.Consume();
            			    	        	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (object)adaptor.Create(eq));
            			    	        	    state.errorRecovery = false;state.failed = false;
            			    	        	}
            			    	        	else 
            			    	        	{
            			    	        	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            			    	        	    MismatchedSetException mse = new MismatchedSetException(null,input);
            			    	        	    throw mse;
            			    	        	}

            			    	        	if ( state.backtracking == 0 ) 
            			    	        	{
            			    	        	  IndentEmit((CommonToken)eq);
            			    	        	}

            			    	        }
            			    	        break;

            			    	}

            			    	PushFollow(FOLLOW_shiftExpression_in_relationalExpression11228);
            			    	shiftExpression286 = shiftExpression();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, shiftExpression286.Tree);
            			    	if ( state.backtracking == 0 ) 
            			    	{
            			    	  PopIndent();
            			    	}

            			    }
            			    break;

            			default:
            			    goto loop133;
            	    }
            	} while (true);

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


            }

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

            if ( state.backtracking==0 )
            {	retval.Tree = (object)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 = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 120, relationalExpression_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR start "relationalExpression"
    // AS3_ex.g3:3236:1: relationalExpression : shiftExpression ( (g= GT (assign= ASSIGN )? | eq= ( IN | LT | LTE | INSTANCEOF | IS | AS ) ) shiftExpression )* ;
    public AS3_exParser.relationalExpression_return relationalExpression() // throws RecognitionException [1]
    {   
        AS3_exParser.relationalExpression_return retval = new AS3_exParser.relationalExpression_return();
        retval.Start = input.LT(1);
        int relationalExpression_StartIndex = input.Index();
        object root_0 = null;

        IToken g = null;
        IToken assign = null;
        IToken eq = null;
        AS3_exParser.shiftExpression_return shiftExpression296 = null;

        AS3_exParser.shiftExpression_return shiftExpression297 = null;


        object g_tree=null;
        object assign_tree=null;
        object eq_tree=null;


            WrapOptions options=mPrinter.getExpressionWrapOptions();
            bool pushedWrapInfo=false;

        try 
        {
            if ( (state.backtracking > 0) && AlreadyParsedRule(input, 120) ) 
            {
                return retval; 
            }
            // AS3_ex.g3:3241:5: ( shiftExpression ( (g= GT (assign= ASSIGN )? | eq= ( IN | LT | LTE | INSTANCEOF | IS | AS ) ) shiftExpression )* )
            // AS3_ex.g3:3241:9: shiftExpression ( (g= GT (assign= ASSIGN )? | eq= ( IN | LT | LTE | INSTANCEOF | IS | AS ) ) shiftExpression )*
            {
                root_0 = (object)adaptor.GetNilNode();

                if ( state.backtracking == 0 ) 
                {
                  pushedWrapInfo=pushWrapInfo(options, true);
                }
                PushFollow(FOLLOW_shiftExpression_in_relationalExpression12784);
                shiftExpression296 = shiftExpression();
                state.followingStackPointer--;
                if (state.failed) return retval;
                if ( state.backtracking == 0 ) adaptor.AddChild(root_0, shiftExpression296.Tree);
                // AS3_ex.g3:3243:6: ( (g= GT (assign= ASSIGN )? | eq= ( IN | LT | LTE | INSTANCEOF | IS | AS ) ) shiftExpression )*
                do 
                {
                    int alt140 = 2;
                    switch ( input.LA(1) ) 
                    {
                    case LT:
                        {
                        int LA140_2 = input.LA(2);

                        if ( (synpred282_AS3_ex()) )
                        {
                            alt140 = 1;
                        }


                        }
                        break;
                    case IN:
                        {
                        int LA140_3 = input.LA(2);

                        if ( (synpred282_AS3_ex()) )
                        {
                            alt140 = 1;
                        }


                        }
                        break;
                    case AS:
                    case INSTANCEOF:
                    case IS:
                        {
                        int LA140_4 = input.LA(2);

                        if ( (synpred282_AS3_ex()) )
                        {
                            alt140 = 1;
                        }


                        }
                        break;
                    case GT:
                        {
                        int LA140_5 = input.LA(2);

                        if ( (synpred282_AS3_ex()) )
                        {
                            alt140 = 1;
                        }


                        }
                        break;
                    case LTE:
                        {
                        int LA140_6 = input.LA(2);

                        if ( (synpred282_AS3_ex()) )
                        {
                            alt140 = 1;
                        }


                        }
                        break;

                    }

                    switch (alt140) 
                    {
                        case 1 :
                            // AS3_ex.g3:3244:7: (g= GT (assign= ASSIGN )? | eq= ( IN | LT | LTE | INSTANCEOF | IS | AS ) ) shiftExpression
                            {
                                // AS3_ex.g3:3244:7: (g= GT (assign= ASSIGN )? | eq= ( IN | LT | LTE | INSTANCEOF | IS | AS ) )
                                int alt139 = 2;
                                int LA139_0 = input.LA(1);

                                if ( (LA139_0 == GT) )
                                {
                                    alt139 = 1;
                                }
                                else if ( (LA139_0 == AS || (LA139_0 >= IN && LA139_0 <= INSTANCEOF) || LA139_0 == IS || LA139_0 == LT || LA139_0 == LTE) )
                                {
                                    alt139 = 2;
                                }
                                else 
                                {
                                    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                                    NoViableAltException nvae_d139s0 =
                                        new NoViableAltException("", 139, 0, input);

                                    throw nvae_d139s0;
                                }
                                switch (alt139) 
                                {
                                    case 1 :
                                        // AS3_ex.g3:3244:9: g= GT (assign= ASSIGN )?
                                        {
                                            g=(IToken)Match(input,GT,FOLLOW_GT_in_relationalExpression12804); if (state.failed) return retval;
                                            if ( state.backtracking == 0 )
                                            {g_tree = (object)adaptor.Create(g);
                                                adaptor.AddChild(root_0, g_tree);
                                            }
                                            // AS3_ex.g3:3244:14: (assign= ASSIGN )?
                                            int alt138 = 2;
                                            int LA138_0 = input.LA(1);

                                            if ( (LA138_0 == ASSIGN) )
                                            {
                                                alt138 = 1;
                                            }
                                            switch (alt138) 
                                            {
                                                case 1 :
                                                    // AS3_ex.g3:3244:15: assign= ASSIGN
                                                    {
                                                        assign=(IToken)Match(input,ASSIGN,FOLLOW_ASSIGN_in_relationalExpression12809); if (state.failed) return retval;
                                                        if ( state.backtracking == 0 )
                                                        {assign_tree = (object)adaptor.Create(assign);
                                                            adaptor.AddChild(root_0, assign_tree);
                                                        }

                                                    }
                                                    break;

                                            }

                                            if ( state.backtracking == 0 ) 
                                            {
                                              if (assign!=null)
                                                             {
                                                                g.Text = ">=";
                                                                g.Type = GTE;
                                                             }
                                                             indentEmit(g, ASPrettyPrinter.Break_Arithmetic_Ops_code);
                                                            
                                            }

                                        }
                                        break;
                                    case 2 :
                                        // AS3_ex.g3:3252:14: eq= ( IN | LT | LTE | INSTANCEOF | IS | AS )
                                        {
                                            eq = (IToken)input.LT(1);
                                            if ( input.LA(1) == AS || (input.LA(1) >= IN && input.LA(1) <= INSTANCEOF) || input.LA(1) == IS || input.LA(1) == LT || input.LA(1) == LTE ) 
                                            {
                                                input.Consume();
                                                if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (object)adaptor.Create(eq));
                                                state.errorRecovery = false;state.failed = false;
                                            }
                                            else 
                                            {
                                                if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                                                MismatchedSetException mse = new MismatchedSetException(null,input);
                                                throw mse;
                                            }

                                            if ( state.backtracking == 0 ) 
                                            {
                                              indentEmit(eq, ASPrettyPrinter.Break_Arithmetic_Ops_code);
                                            }

                                        }
                                        break;

                                }

                                PushFollow(FOLLOW_shiftExpression_in_relationalExpression12880);
                                shiftExpression297 = shiftExpression();
                                state.followingStackPointer--;
                                if (state.failed) return retval;
                                if ( state.backtracking == 0 ) adaptor.AddChild(root_0, shiftExpression297.Tree);
                                if ( state.backtracking == 0 ) 
                                {
                                  popIndent();
                                }

                            }
                            break;

                        default:
                            goto loop140;
                    }
                } while (true);

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

                if ( state.backtracking == 0 ) 
                {
                  if (pushedWrapInfo) mPrinter.popWrapContext();
                }

            }

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

            if ( state.backtracking==0 )
            {   retval.Tree = (object)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 = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
        {
            if ( state.backtracking > 0 ) 
            {
                Memoize(input, 120, relationalExpression_StartIndex); 
            }
        }
        return retval;
    }