Example #1
0
    // $ANTLR start "ifStatement"
    // AS3_ex.g3:2025:1: ifStatement : I= IF parExpression statement ( options {k=1; } : E= ELSE statement )? ;
    public AS3_exParser.ifStatement_return ifStatement() // throws RecognitionException [1]
    {   
        AS3_exParser.ifStatement_return retval = new AS3_exParser.ifStatement_return();
        retval.Start = input.LT(1);
        int ifStatement_StartIndex = input.Index();
        object root_0 = null;

        IToken I = null;
        IToken E = null;
        AS3_exParser.parExpression_return parExpression206 = null;

        AS3_exParser.statement_return statement207 = null;

        AS3_exParser.statement_return statement208 = null;


        object I_tree=null;
        object E_tree=null;


           CommonToken tok=null;
           bool ifOnSameLine=false;
           bool wasBlock=false;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 85) ) 
    	    {
    	    	return retval; 
    	    }
            // AS3_ex.g3:2032:5: (I= IF parExpression statement ( options {k=1; } : E= ELSE statement )? )
            // AS3_ex.g3:2033:9: I= IF parExpression statement ( options {k=1; } : E= ELSE statement )?
            {
            	root_0 = (object)adaptor.GetNilNode();

            	if ( state.backtracking == 0 ) 
            	{

            	             tok=mPrinter.GetLastToken(); 
            	             //if the previous token was not an else, then insert a CR.  Also if it is an 'else' but the setting says to put the 'if' on a new line
            	             if (!mPrinter.IsKeepElseIfOnSameLine() || (tok==null) || !tok.Text.Equals("else"))
            	             {
            	             		InsertStatementCR();
            	             }

            	             if (tok!=null && tok.Text.Equals("else"))
            	             {
            	             		mPrinter.SetElseIfState();
            	             }
            	          
            	}
            	I=(IToken)Match(input,IF,FOLLOW_IF_in_ifStatement9316); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{I_tree = (object)adaptor.Create(I);
            		adaptor.AddChild(root_0, I_tree);
            	}
            	if ( state.backtracking == 0 ) 
            	{

            	                Emit((CommonToken)I);
            	                ifOnSameLine=mPrinter.GetElseIfNeedToLoseIndent();
            	                if (ifOnSameLine)
            	                    PopIndent();
            	                InsertWS(mPrinter.GetSpacesBetweenControlKeywordsAndParens());
            	           
            	}
            	if ( state.backtracking == 0 ) 
            	{
            	  PushExpressionIndent();
            	}
            	PushFollow(FOLLOW_parExpression_in_ifStatement9351);
            	parExpression206 = parExpression();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, parExpression206.Tree);
            	if ( state.backtracking == 0 ) 
            	{
            	  PopIndent();
            	}
            	if ( state.backtracking == 0 ) 
            	{
            	  PushIndent(false);
            	}
            	if ( state.backtracking == 0 ) 
            	{
            	  AddIfElseBlockTracker();SetBlockFlag(false);ClearBlockFlag();
            	}
            	PushFollow(FOLLOW_statement_in_ifStatement9396);
            	statement207 = statement();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, statement207.Tree);
            	if ( state.backtracking == 0 ) 
            	{
            	  wasBlock=IsBlockFlag();PopIfElseBlockTracker();
            	}
            	if ( state.backtracking == 0 ) 
            	{
            	  PopIndent();
            	}
            	// AS3_ex.g3:2063:10: ( options {k=1; } : E= ELSE statement )?
            	int alt98 = 2;
            	int LA98_0 = input.LA(1);

            	if ( (LA98_0 == ELSE) )
            	{
            	    int LA98_2 = input.LA(2);

            	    if ( (synpred211_AS3_ex()) )
            	    {
            	        alt98 = 1;
            	    }
            	}
            	switch (alt98) 
            	{
            	    case 1 :
            	        // AS3_ex.g3:2063:26: E= ELSE statement
            	        {
            	        	E=(IToken)Match(input,ELSE,FOLLOW_ELSE_in_ifStatement9451); if (state.failed) return retval;
            	        	if ( state.backtracking == 0 )
            	        	{E_tree = (object)adaptor.Create(E);
            	        		adaptor.AddChild(root_0, E_tree);
            	        	}
            	        	if ( state.backtracking == 0 ) 
            	        	{

            	        	  	          CommonToken tempTok= (CommonToken) mPrinter.GetLastToken();
            	        	  	          if (mPrinter.IsCRBeforeElse() || !wasBlock)//tempTok==null || !tempTok.Text.Equals("}")) 
            	        	  	              InsertCR(false);
            	        	  	         
            	        	}
            	        	if ( state.backtracking == 0 ) 
            	        	{
            	        	  InsertWS(1);
            	        	}
            	        	if ( state.backtracking == 0 ) 
            	        	{
            	        	  Emit((CommonToken)E);
            	        	}
            	        	if ( state.backtracking == 0 ) 
            	        	{
            	        	  PushIndent(false);
            	        	}
            	        	PushFollow(FOLLOW_statement_in_ifStatement9492);
            	        	statement208 = statement();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, statement208.Tree);
            	        	if ( state.backtracking == 0 ) 
            	        	{
            	        	  PopIndent();
            	        	}

            	        }
            	        break;

            	}

            	if ( state.backtracking == 0 ) 
            	{
            	  if (ifOnSameLine)
            	              	PushIndent(false);
            	}

            }

            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, 85, ifStatement_StartIndex); 
            }
        }
        return retval;
    }
Example #2
0
    // $ANTLR start "ifStatement"
    // AS3_ex.g3:2700:1: ifStatement : I= IF parExpression statement ( options {k=1; } : E= ELSE statement )? ;
    public AS3_exParser.ifStatement_return ifStatement() // throws RecognitionException [1]
    {   
        AS3_exParser.ifStatement_return retval = new AS3_exParser.ifStatement_return();
        retval.Start = input.LT(1);
        int ifStatement_StartIndex = input.Index();
        object root_0 = null;

        IToken I = null;
        IToken E = null;
        AS3_exParser.parExpression_return parExpression217 = null;

        AS3_exParser.statement_return statement218 = null;

        AS3_exParser.statement_return statement219 = null;


        object I_tree=null;
        object E_tree=null;


           IToken tok=null;
           bool ifOnSameLine=false;
           bool wasBlock=false;
           bool needCloseBrace=false;
           int statementStartInOutput=(-1);
           int statementEndInOutput=(-1);
           int statementCount=0;
           IToken endToken=null;

        try 
        {
            if ( (state.backtracking > 0) && AlreadyParsedRule(input, 85) ) 
            {
                return retval; 
            }
            // AS3_ex.g3:2712:5: (I= IF parExpression statement ( options {k=1; } : E= ELSE statement )? )
            // AS3_ex.g3:2713:6: I= IF parExpression statement ( options {k=1; } : E= ELSE statement )?
            {
                root_0 = (object)adaptor.GetNilNode();

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

                             tok=mPrinter.getLastToken(); 
                             //if the previous token was not an else, then insert a CR.  Also if it is an 'else' but the setting says to put the 'if' on a new line
                             if (!mPrinter.isKeepElseIfOnSameLine() || (tok==null) || tok.Text != "else")
                             {
                                    insertStatementCR();
                             }

                             if (tok!=null && tok.Text == "else")
                             {
                                    mPrinter.setElseIfState();
                             }
                          
                }
                I=(IToken)Match(input,IF,FOLLOW_IF_in_ifStatement10263); if (state.failed) return retval;
                if ( state.backtracking == 0 )
                {I_tree = (object)adaptor.Create(I);
                    adaptor.AddChild(root_0, I_tree);
                }
                if ( state.backtracking == 0 ) 
                {

                                emit(I);
                                statementStartInOutput=mPrinter.getCurrentOutputLength();
                                ifOnSameLine=mPrinter.getElseIfNeedToLoseIndent();
                                if (ifOnSameLine)
                                    popIndent();
                                insertWS(mPrinter.getSpacesBetweenControlKeywordsAndParens());
                           
                }
                if ( state.backtracking == 0 ) 
                {
                  pushExpressionIndent();
                }
                PushFollow(FOLLOW_parExpression_in_ifStatement10298);
                parExpression217 = parExpression();
                state.followingStackPointer--;
                if (state.failed) return retval;
                if ( state.backtracking == 0 ) adaptor.AddChild(root_0, parExpression217.Tree);
                if ( state.backtracking == 0 ) 
                {
                  endToken=input.LT(-1);statementEndInOutput=mPrinter.getCurrentOutputLength();
                }
                if ( state.backtracking == 0 ) 
                {
                  popIndent();
                }
                if ( state.backtracking == 0 ) 
                {
                  pushIndent(false);
                }
                if ( state.backtracking == 0 ) 
                {
                  addIfElseBlockTracker();setBlockFlag(false);clearBlockFlag();
                }
                if ( state.backtracking == 0 ) 
                {
                  mCodeBlockStack.Add(ASPrettyPrinter.BraceContext_controlStatement_code);
                }
                if ( state.backtracking == 0 ) 
                {
                  mPrinter.addOpenBrace(input, ASPrettyPrinter.BraceAdd_Conditional);
                          mPrinter.captureStatementStart(I, statementStartInOutput);
                          mPrinter.captureStatementEnd(endToken, statementEndInOutput);
                          statementCount=mStatementCount;
                         
                }
                PushFollow(FOLLOW_statement_in_ifStatement10370);
                statement218 = statement();
                state.followingStackPointer--;
                if (state.failed) return retval;
                if ( state.backtracking == 0 ) adaptor.AddChild(root_0, statement218.Tree);
                if ( state.backtracking == 0 ) 
                {
                  mPrinter.addCloseBrace(input.LT(1), ASPrettyPrinter.BraceAdd_Conditional, mStatementCount-statementCount);
                }
                if ( state.backtracking == 0 ) 
                {
                  popBlockStack();
                }
                if ( state.backtracking == 0 ) 
                {
                  wasBlock=isBlockFlag();popIfElseBlockTracker();
                }
                if ( state.backtracking == 0 ) 
                {
                  popIndent();
                }
                // AS3_ex.g3:2754:10: ( options {k=1; } : E= ELSE statement )?
                int alt105 = 2;
                int LA105_0 = input.LA(1);

                if ( (LA105_0 == ELSE) )
                {
                    int LA105_2 = input.LA(2);

                    if ( (synpred221_AS3_ex()) )
                    {
                        alt105 = 1;
                    }
                }
                switch (alt105) 
                {
                    case 1 :
                        // AS3_ex.g3:2754:26: E= ELSE statement
                        {
                            E=(IToken)Match(input,ELSE,FOLLOW_ELSE_in_ifStatement10447); if (state.failed) return retval;
                            if ( state.backtracking == 0 )
                            {E_tree = (object)adaptor.Create(E);
                                adaptor.AddChild(root_0, E_tree);
                            }
                            if ( state.backtracking == 0 ) 
                            {

                                          IToken tempTok=mPrinter.getLastToken();
                                          if (mPrinter.isCRBeforeElse() || !wasBlock)//tempTok==null || tempTok.Text != "}") 
                                              insertCR(false);
                                         
                            }
                            if ( state.backtracking == 0 ) 
                            {
                              insertWS(1);
                            }
                            if ( state.backtracking == 0 ) 
                            {
                              emit(E);
                            }
                            if ( state.backtracking == 0 ) 
                            {
                              pushIndent(false);
                            }
                            if ( state.backtracking == 0 ) 
                            {
                              mCodeBlockStack.Add(ASPrettyPrinter.BraceContext_controlStatement_code);
                            }
                            if ( state.backtracking == 0 ) 
                            {
                              needCloseBrace=mPrinter.addOpenBraceForElse((CommonTokenStream)input);statementCount=mStatementCount;
                            }
                            if ( state.backtracking == 0 ) 
                            {
                              mPrinter.inCondition();
                            }
                            PushFollow(FOLLOW_statement_in_ifStatement10535);
                            statement219 = statement();
                            state.followingStackPointer--;
                            if (state.failed) return retval;
                            if ( state.backtracking == 0 ) adaptor.AddChild(root_0, statement219.Tree);
                            if ( state.backtracking == 0 ) 
                            {
                              if (needCloseBrace)
                                            mPrinter.addCloseBrace(input.LT(1), ASPrettyPrinter.BraceAdd_Conditional, mStatementCount-statementCount);
                            }
                            if ( state.backtracking == 0 ) 
                            {
                              popBlockStack();
                            }
                            if ( state.backtracking == 0 ) 
                            {
                              popIndent();
                            }

                        }
                        break;

                }

                if ( state.backtracking == 0 ) 
                {
                  if (ifOnSameLine)
                                pushIndent(false);
                }

            }

            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, 85, ifStatement_StartIndex); 
            }
        }
        return retval;
    }