Пример #1
0
    // $ANTLR start "exprList"
    // MathExpr.g:135:1: exprList : ( expr ( ( ';' )* expr )* )? ( ';' )* -> ^( BLOCK ( expr )* ) ;
    public MathExprParser.exprList_return exprList() // throws RecognitionException [1]
    {   
        MathExprParser.exprList_return retval = new MathExprParser.exprList_return();
        retval.Start = input.LT(1);
        int exprList_StartIndex = input.Index();
        AstNode root_0 = null;

        IToken char_literal87 = null;
        IToken char_literal89 = null;
        MathExprParser.expr_return expr86 = default(MathExprParser.expr_return);

        MathExprParser.expr_return expr88 = default(MathExprParser.expr_return);


        AstNode char_literal87_tree=null;
        AstNode char_literal89_tree=null;
        RewriteRuleTokenStream stream_55 = new RewriteRuleTokenStream(adaptor,"token 55");
        RewriteRuleSubtreeStream stream_expr = new RewriteRuleSubtreeStream(adaptor,"rule expr");
        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 18) ) 
    	    {
    	    	return retval; 
    	    }
            // MathExpr.g:135:9: ( ( expr ( ( ';' )* expr )* )? ( ';' )* -> ^( BLOCK ( expr )* ) )
            // MathExpr.g:135:11: ( expr ( ( ';' )* expr )* )? ( ';' )*
            {
            	// MathExpr.g:135:11: ( expr ( ( ';' )* expr )* )?
            	int alt18 = 2;
            	int LA18_0 = input.LA(1);

            	if ( (LA18_0 == IF || (LA18_0 >= FOR && LA18_0 <= REPEAT) || LA18_0 == RETURN || LA18_0 == IDENT || LA18_0 == 53) )
            	{
            	    alt18 = 1;
            	}
            	switch (alt18) 
            	{
            	    case 1 :
            	        // MathExpr.g:135:13: expr ( ( ';' )* expr )*
            	        {
            	        	PushFollow(FOLLOW_expr_in_exprList1400);
            	        	expr86 = expr();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( (state.backtracking==0) ) stream_expr.Add(expr86.Tree);
            	        	// MathExpr.g:135:18: ( ( ';' )* expr )*
            	        	do 
            	        	{
            	        	    int alt17 = 2;
            	        	    alt17 = dfa17.Predict(input);
            	        	    switch (alt17) 
            	        		{
            	        			case 1 :
            	        			    // MathExpr.g:135:20: ( ';' )* expr
            	        			    {
            	        			    	// MathExpr.g:135:20: ( ';' )*
            	        			    	do 
            	        			    	{
            	        			    	    int alt16 = 2;
            	        			    	    int LA16_0 = input.LA(1);

            	        			    	    if ( (LA16_0 == 55) )
            	        			    	    {
            	        			    	        alt16 = 1;
            	        			    	    }


            	        			    	    switch (alt16) 
            	        			    		{
            	        			    			case 1 :
            	        			    			    // MathExpr.g:0:0: ';'
            	        			    			    {
            	        			    			    	char_literal87=(IToken)Match(input,55,FOLLOW_55_in_exprList1404); if (state.failed) return retval; 
            	        			    			    	if ( (state.backtracking==0) ) stream_55.Add(char_literal87);


            	        			    			    }
            	        			    			    break;

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

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

            	        			    	PushFollow(FOLLOW_expr_in_exprList1407);
            	        			    	expr88 = expr();
            	        			    	state.followingStackPointer--;
            	        			    	if (state.failed) return retval;
            	        			    	if ( (state.backtracking==0) ) stream_expr.Add(expr88.Tree);

            	        			    }
            	        			    break;

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

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


            	        }
            	        break;

            	}

            	// MathExpr.g:135:36: ( ';' )*
            	do 
            	{
            	    int alt19 = 2;
            	    int LA19_0 = input.LA(1);

            	    if ( (LA19_0 == 55) )
            	    {
            	        alt19 = 1;
            	    }


            	    switch (alt19) 
            		{
            			case 1 :
            			    // MathExpr.g:0:0: ';'
            			    {
            			    	char_literal89=(IToken)Match(input,55,FOLLOW_55_in_exprList1415); if (state.failed) return retval; 
            			    	if ( (state.backtracking==0) ) stream_55.Add(char_literal89);


            			    }
            			    break;

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

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



            	// AST REWRITE
            	// elements:          expr
            	// token labels:      
            	// rule labels:       retval
            	// token list labels: 
            	// rule list labels:  
            	// wildcard labels: 
            	if ( (state.backtracking==0) ) {
            	retval.Tree = root_0;
            	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

            	root_0 = (AstNode)adaptor.GetNilNode();
            	// 135:42: -> ^( BLOCK ( expr )* )
            	{
            	    // MathExpr.g:135:46: ^( BLOCK ( expr )* )
            	    {
            	    AstNode root_1 = (AstNode)adaptor.GetNilNode();
            	    root_1 = (AstNode)adaptor.BecomeRoot((AstNode)adaptor.Create(BLOCK, "BLOCK"), root_1);

            	    // MathExpr.g:135:54: ( expr )*
            	    while ( stream_expr.HasNext() )
            	    {
            	        adaptor.AddChild(root_1, stream_expr.NextTree());

            	    }
            	    stream_expr.Reset();

            	    adaptor.AddChild(root_0, root_1);
            	    }

            	}

            	retval.Tree = root_0;retval.Tree = root_0;}
            }

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

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

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 18, exprList_StartIndex); 
            }
        }
        return retval;
    }
Пример #2
0
    // $ANTLR start "exprList"
    // MathExpr.g:205:1: exprList : ( expr ( ( ';' )? exprList | ( ';' )* ) )? ;
    public MathExprParser.exprList_return exprList() // throws RecognitionException [1]
    {   
        MathExprParser.exprList_return retval = new MathExprParser.exprList_return();
        retval.Start = input.LT(1);
        int exprList_StartIndex = input.Index();
        AstNode root_0 = null;

        IToken char_literal175 = null;
        IToken char_literal177 = null;
        MathExprParser.expr_return expr174 = default(MathExprParser.expr_return);

        MathExprParser.exprList_return exprList176 = default(MathExprParser.exprList_return);


        AstNode char_literal175_tree=null;
        AstNode char_literal177_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 25) ) 
    	    {
    	    	return retval; 
    	    }
            // MathExpr.g:205:9: ( ( expr ( ( ';' )? exprList | ( ';' )* ) )? )
            // MathExpr.g:205:11: ( expr ( ( ';' )? exprList | ( ';' )* ) )?
            {
            	root_0 = (AstNode)adaptor.GetNilNode();

            	// MathExpr.g:205:11: ( expr ( ( ';' )? exprList | ( ';' )* ) )?
            	int alt46 = 2;
            	int LA46_0 = input.LA(1);

            	if ( (LA46_0 == PRINT || LA46_0 == BEGIN || LA46_0 == IF || (LA46_0 >= WHILE && LA46_0 <= FOR) || LA46_0 == LET || LA46_0 == REPEATE || LA46_0 == VAR || (LA46_0 >= FUNC && LA46_0 <= SWITCH) || LA46_0 == IDENT || (LA46_0 >= INCR && LA46_0 <= DECR)) )
            	{
            	    alt46 = 1;
            	}
            	switch (alt46) 
            	{
            	    case 1 :
            	        // MathExpr.g:205:12: expr ( ( ';' )? exprList | ( ';' )* )
            	        {
            	        	PushFollow(FOLLOW_expr_in_exprList2063);
            	        	expr174 = expr();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, expr174.Tree);
            	        	// MathExpr.g:205:17: ( ( ';' )? exprList | ( ';' )* )
            	        	int alt45 = 2;
            	        	switch ( input.LA(1) ) 
            	        	{
            	        	case 77:
            	        		{
            	        	    int LA45_1 = input.LA(2);

            	        	    if ( (synpred79_MathExpr()) )
            	        	    {
            	        	        alt45 = 1;
            	        	    }
            	        	    else if ( (true) )
            	        	    {
            	        	        alt45 = 2;
            	        	    }
            	        	    else 
            	        	    {
            	        	        if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	        	        NoViableAltException nvae_d45s1 =
            	        	            new NoViableAltException("", 45, 1, input);

            	        	        throw nvae_d45s1;
            	        	    }
            	        	    }
            	        	    break;
            	        	case PRINT:
            	        	case BEGIN:
            	        	case IF:
            	        	case WHILE:
            	        	case FOR:
            	        	case LET:
            	        	case REPEATE:
            	        	case VAR:
            	        	case FUNC:
            	        	case RETURN:
            	        	case SWITCH:
            	        	case IDENT:
            	        	case INCR:
            	        	case DECR:
            	        		{
            	        	    alt45 = 1;
            	        	    }
            	        	    break;
            	        	case END:
            	        		{
            	        	    int LA45_3 = input.LA(2);

            	        	    if ( (synpred79_MathExpr()) )
            	        	    {
            	        	        alt45 = 1;
            	        	    }
            	        	    else if ( (true) )
            	        	    {
            	        	        alt45 = 2;
            	        	    }
            	        	    else 
            	        	    {
            	        	        if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	        	        NoViableAltException nvae_d45s3 =
            	        	            new NoViableAltException("", 45, 3, input);

            	        	        throw nvae_d45s3;
            	        	    }
            	        	    }
            	        	    break;
            	        	case EOF:
            	        		{
            	        	    int LA45_4 = input.LA(2);

            	        	    if ( (synpred79_MathExpr()) )
            	        	    {
            	        	        alt45 = 1;
            	        	    }
            	        	    else if ( (true) )
            	        	    {
            	        	        alt45 = 2;
            	        	    }
            	        	    else 
            	        	    {
            	        	        if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	        	        NoViableAltException nvae_d45s4 =
            	        	            new NoViableAltException("", 45, 4, input);

            	        	        throw nvae_d45s4;
            	        	    }
            	        	    }
            	        	    break;
            	        		default:
            	        		    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	        		    NoViableAltException nvae_d45s0 =
            	        		        new NoViableAltException("", 45, 0, input);

            	        		    throw nvae_d45s0;
            	        	}

            	        	switch (alt45) 
            	        	{
            	        	    case 1 :
            	        	        // MathExpr.g:205:18: ( ';' )? exprList
            	        	        {
            	        	        	// MathExpr.g:205:18: ( ';' )?
            	        	        	int alt43 = 2;
            	        	        	int LA43_0 = input.LA(1);

            	        	        	if ( (LA43_0 == 77) )
            	        	        	{
            	        	        	    alt43 = 1;
            	        	        	}
            	        	        	switch (alt43) 
            	        	        	{
            	        	        	    case 1 :
            	        	        	        // MathExpr.g:205:19: ';'
            	        	        	        {
            	        	        	        	char_literal175=(IToken)Match(input,77,FOLLOW_77_in_exprList2067); if (state.failed) return retval;

            	        	        	        }
            	        	        	        break;

            	        	        	}

            	        	        	PushFollow(FOLLOW_exprList_in_exprList2073);
            	        	        	exprList176 = exprList();
            	        	        	state.followingStackPointer--;
            	        	        	if (state.failed) return retval;
            	        	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, exprList176.Tree);

            	        	        }
            	        	        break;
            	        	    case 2 :
            	        	        // MathExpr.g:205:38: ( ';' )*
            	        	        {
            	        	        	// MathExpr.g:205:38: ( ';' )*
            	        	        	do 
            	        	        	{
            	        	        	    int alt44 = 2;
            	        	        	    int LA44_0 = input.LA(1);

            	        	        	    if ( (LA44_0 == 77) )
            	        	        	    {
            	        	        	        alt44 = 1;
            	        	        	    }


            	        	        	    switch (alt44) 
            	        	        		{
            	        	        			case 1 :
            	        	        			    // MathExpr.g:205:39: ';'
            	        	        			    {
            	        	        			    	char_literal177=(IToken)Match(input,77,FOLLOW_77_in_exprList2078); if (state.failed) return retval;

            	        	        			    }
            	        	        			    break;

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

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


            	        	        }
            	        	        break;

            	        	}


            	        }
            	        break;

            	}


            }

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

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

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