Inheritance: Antlr.Runtime.ParserRuleReturnScope
示例#1
0
    // $ANTLR start "ifelse"
    // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:250:1: ifelse returns [IfStatementElement ret] : ( 'if' LEFTBRACE ( varorstruct ) ( '==' | '!=' | '<' | '<=' | '>' | '>=' ) (e13= var_int_or_double_literal | e14= string_literal ) RIGHTBRACE LEFTPARANTHESIS ( (e11= ifloop ) | ) RIGHTPARANTHESIS ) ( 'else' LEFTPARANTHESIS ( (e12= ifloop ) | ) RIGHTPARANTHESIS )? ;
    public spinachParser.ifelse_return ifelse() // throws RecognitionException [1]
    {   
        spinachParser.ifelse_return retval = new spinachParser.ifelse_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken string_literal107 = null;
        IToken LEFTBRACE108 = null;
        IToken string_literal110 = null;
        IToken string_literal111 = null;
        IToken char_literal112 = null;
        IToken string_literal113 = null;
        IToken char_literal114 = null;
        IToken string_literal115 = null;
        IToken RIGHTBRACE116 = null;
        IToken LEFTPARANTHESIS117 = null;
        IToken RIGHTPARANTHESIS118 = null;
        IToken string_literal119 = null;
        IToken LEFTPARANTHESIS120 = null;
        IToken RIGHTPARANTHESIS121 = null;
        spinachParser.var_int_or_double_literal_return e13 = null;

        spinachParser.string_literal_return e14 = null;

        spinachParser.ifloop_return e11 = null;

        spinachParser.ifloop_return e12 = null;

        spinachParser.varorstruct_return varorstruct109 = null;


        object string_literal107_tree=null;
        object LEFTBRACE108_tree=null;
        object string_literal110_tree=null;
        object string_literal111_tree=null;
        object char_literal112_tree=null;
        object string_literal113_tree=null;
        object char_literal114_tree=null;
        object string_literal115_tree=null;
        object RIGHTBRACE116_tree=null;
        object LEFTPARANTHESIS117_tree=null;
        object RIGHTPARANTHESIS118_tree=null;
        object string_literal119_tree=null;
        object LEFTPARANTHESIS120_tree=null;
        object RIGHTPARANTHESIS121_tree=null;


           retval.ret = new IfStatementElement();

        try 
    	{
            // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:254:1: ( ( 'if' LEFTBRACE ( varorstruct ) ( '==' | '!=' | '<' | '<=' | '>' | '>=' ) (e13= var_int_or_double_literal | e14= string_literal ) RIGHTBRACE LEFTPARANTHESIS ( (e11= ifloop ) | ) RIGHTPARANTHESIS ) ( 'else' LEFTPARANTHESIS ( (e12= ifloop ) | ) RIGHTPARANTHESIS )? )
            // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:254:2: ( 'if' LEFTBRACE ( varorstruct ) ( '==' | '!=' | '<' | '<=' | '>' | '>=' ) (e13= var_int_or_double_literal | e14= string_literal ) RIGHTBRACE LEFTPARANTHESIS ( (e11= ifloop ) | ) RIGHTPARANTHESIS ) ( 'else' LEFTPARANTHESIS ( (e12= ifloop ) | ) RIGHTPARANTHESIS )?
            {
            	root_0 = (object)adaptor.GetNilNode();

            	// C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:254:2: ( 'if' LEFTBRACE ( varorstruct ) ( '==' | '!=' | '<' | '<=' | '>' | '>=' ) (e13= var_int_or_double_literal | e14= string_literal ) RIGHTBRACE LEFTPARANTHESIS ( (e11= ifloop ) | ) RIGHTPARANTHESIS )
            	// C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:254:3: 'if' LEFTBRACE ( varorstruct ) ( '==' | '!=' | '<' | '<=' | '>' | '>=' ) (e13= var_int_or_double_literal | e14= string_literal ) RIGHTBRACE LEFTPARANTHESIS ( (e11= ifloop ) | ) RIGHTPARANTHESIS
            	{
            		string_literal107=(IToken)Match(input,40,FOLLOW_40_in_ifelse1447); 
            			string_literal107_tree = (object)adaptor.Create(string_literal107);
            			adaptor.AddChild(root_0, string_literal107_tree);

            		LEFTBRACE108=(IToken)Match(input,LEFTBRACE,FOLLOW_LEFTBRACE_in_ifelse1449); 
            			LEFTBRACE108_tree = (object)adaptor.Create(LEFTBRACE108);
            			adaptor.AddChild(root_0, LEFTBRACE108_tree);

            		// C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:254:18: ( varorstruct )
            		// C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:254:19: varorstruct
            		{
            			PushFollow(FOLLOW_varorstruct_in_ifelse1452);
            			varorstruct109 = varorstruct();
            			state.followingStackPointer--;

            			adaptor.AddChild(root_0, varorstruct109.Tree);
            			retval.ret.setLhs(((varorstruct109 != null) ? varorstruct109.ret : null));

            		}

            		// C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:254:69: ( '==' | '!=' | '<' | '<=' | '>' | '>=' )
            		int alt32 = 6;
            		switch ( input.LA(1) ) 
            		{
            		case EQUALITYEXPRESSION:
            			{
            		    alt32 = 1;
            		    }
            		    break;
            		case NONEQUALITYEXPRESSION:
            			{
            		    alt32 = 2;
            		    }
            		    break;
            		case LESSTHANEXPRESSION:
            			{
            		    alt32 = 3;
            		    }
            		    break;
            		case LESSTHANEQUALTOEXPRESSION:
            			{
            		    alt32 = 4;
            		    }
            		    break;
            		case GREATERTHANEXPRESSION:
            			{
            		    alt32 = 5;
            		    }
            		    break;
            		case GREATERTHANEQUALTOEXPRESSION:
            			{
            		    alt32 = 6;
            		    }
            		    break;
            			default:
            			    NoViableAltException nvae_d32s0 =
            			        new NoViableAltException("", 32, 0, input);

            			    throw nvae_d32s0;
            		}

            		switch (alt32) 
            		{
            		    case 1 :
            		        // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:255:7: '=='
            		        {
            		        	string_literal110=(IToken)Match(input,EQUALITYEXPRESSION,FOLLOW_EQUALITYEXPRESSION_in_ifelse1463); 
            		        		string_literal110_tree = (object)adaptor.Create(string_literal110);
            		        		adaptor.AddChild(root_0, string_literal110_tree);

            		        	 retval.ret.OP = "eq"; 

            		        }
            		        break;
            		    case 2 :
            		        // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:256:7: '!='
            		        {
            		        	string_literal111=(IToken)Match(input,NONEQUALITYEXPRESSION,FOLLOW_NONEQUALITYEXPRESSION_in_ifelse1473); 
            		        		string_literal111_tree = (object)adaptor.Create(string_literal111);
            		        		adaptor.AddChild(root_0, string_literal111_tree);

            		        	 retval.ret.OP = "ne"; 

            		        }
            		        break;
            		    case 3 :
            		        // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:257:7: '<'
            		        {
            		        	char_literal112=(IToken)Match(input,LESSTHANEXPRESSION,FOLLOW_LESSTHANEXPRESSION_in_ifelse1483); 
            		        		char_literal112_tree = (object)adaptor.Create(char_literal112);
            		        		adaptor.AddChild(root_0, char_literal112_tree);

            		        	 retval.ret.OP = "lt"; 

            		        }
            		        break;
            		    case 4 :
            		        // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:258:7: '<='
            		        {
            		        	string_literal113=(IToken)Match(input,LESSTHANEQUALTOEXPRESSION,FOLLOW_LESSTHANEQUALTOEXPRESSION_in_ifelse1494); 
            		        		string_literal113_tree = (object)adaptor.Create(string_literal113);
            		        		adaptor.AddChild(root_0, string_literal113_tree);

            		        	 retval.ret.OP = "le"; 

            		        }
            		        break;
            		    case 5 :
            		        // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:259:7: '>'
            		        {
            		        	char_literal114=(IToken)Match(input,GREATERTHANEXPRESSION,FOLLOW_GREATERTHANEXPRESSION_in_ifelse1504); 
            		        		char_literal114_tree = (object)adaptor.Create(char_literal114);
            		        		adaptor.AddChild(root_0, char_literal114_tree);

            		        	 retval.ret.OP = "gt"; 

            		        }
            		        break;
            		    case 6 :
            		        // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:260:7: '>='
            		        {
            		        	string_literal115=(IToken)Match(input,GREATERTHANEQUALTOEXPRESSION,FOLLOW_GREATERTHANEQUALTOEXPRESSION_in_ifelse1515); 
            		        		string_literal115_tree = (object)adaptor.Create(string_literal115);
            		        		adaptor.AddChild(root_0, string_literal115_tree);

            		        	 retval.ret.OP = "ge"; 

            		        }
            		        break;

            		}

            		// C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:262:1: (e13= var_int_or_double_literal | e14= string_literal )
            		int alt33 = 2;
            		int LA33_0 = input.LA(1);

            		if ( ((LA33_0 >= VARIABLE && LA33_0 <= DOUBLE_LITERAL)) )
            		{
            		    alt33 = 1;
            		}
            		else if ( (LA33_0 == 27) )
            		{
            		    alt33 = 2;
            		}
            		else 
            		{
            		    NoViableAltException nvae_d33s0 =
            		        new NoViableAltException("", 33, 0, input);

            		    throw nvae_d33s0;
            		}
            		switch (alt33) 
            		{
            		    case 1 :
            		        // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:262:2: e13= var_int_or_double_literal
            		        {
            		        	PushFollow(FOLLOW_var_int_or_double_literal_in_ifelse1528);
            		        	e13 = var_int_or_double_literal();
            		        	state.followingStackPointer--;

            		        	adaptor.AddChild(root_0, e13.Tree);
            		        	retval.ret.setRhs(((e13 != null) ? e13.ret : null));

            		        }
            		        break;
            		    case 2 :
            		        // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:262:64: e14= string_literal
            		        {
            		        	PushFollow(FOLLOW_string_literal_in_ifelse1535);
            		        	e14 = string_literal();
            		        	state.followingStackPointer--;

            		        	adaptor.AddChild(root_0, e14.Tree);
            		        	retval.ret.setRhs(((e14 != null) ? e14.ret : null));

            		        }
            		        break;

            		}

            		RIGHTBRACE116=(IToken)Match(input,RIGHTBRACE,FOLLOW_RIGHTBRACE_in_ifelse1539); 
            			RIGHTBRACE116_tree = (object)adaptor.Create(RIGHTBRACE116);
            			adaptor.AddChild(root_0, RIGHTBRACE116_tree);

            		LEFTPARANTHESIS117=(IToken)Match(input,LEFTPARANTHESIS,FOLLOW_LEFTPARANTHESIS_in_ifelse1541); 
            			LEFTPARANTHESIS117_tree = (object)adaptor.Create(LEFTPARANTHESIS117);
            			adaptor.AddChild(root_0, LEFTPARANTHESIS117_tree);

            		// C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:262:143: ( (e11= ifloop ) | )
            		int alt34 = 2;
            		int LA34_0 = input.LA(1);

            		if ( (LA34_0 == VARIABLE || LA34_0 == VARTYPE || LA34_0 == STRINGTYPE || LA34_0 == 28 || LA34_0 == 32 || (LA34_0 >= 35 && LA34_0 <= 36) || LA34_0 == 40 || LA34_0 == 42 || (LA34_0 >= 46 && LA34_0 <= 48) || (LA34_0 >= 52 && LA34_0 <= 56)) )
            		{
            		    alt34 = 1;
            		}
            		else if ( (LA34_0 == RIGHTPARANTHESIS) )
            		{
            		    alt34 = 2;
            		}
            		else 
            		{
            		    NoViableAltException nvae_d34s0 =
            		        new NoViableAltException("", 34, 0, input);

            		    throw nvae_d34s0;
            		}
            		switch (alt34) 
            		{
            		    case 1 :
            		        // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:262:144: (e11= ifloop )
            		        {
            		        	// C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:262:144: (e11= ifloop )
            		        	// C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:262:145: e11= ifloop
            		        	{
            		        		PushFollow(FOLLOW_ifloop_in_ifelse1549);
            		        		e11 = ifloop();
            		        		state.followingStackPointer--;

            		        		adaptor.AddChild(root_0, e11.Tree);
            		        		retval.ret.IFCODE = ((e11 != null) ? e11.ret : null);

            		        	}


            		        }
            		        break;
            		    case 2 :
            		        // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:262:190: 
            		        {
            		        }
            		        break;

            		}

            		RIGHTPARANTHESIS118=(IToken)Match(input,RIGHTPARANTHESIS,FOLLOW_RIGHTPARANTHESIS_in_ifelse1554); 
            			RIGHTPARANTHESIS118_tree = (object)adaptor.Create(RIGHTPARANTHESIS118);
            			adaptor.AddChild(root_0, RIGHTPARANTHESIS118_tree);


            	}

            	// C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:262:208: ( 'else' LEFTPARANTHESIS ( (e12= ifloop ) | ) RIGHTPARANTHESIS )?
            	int alt36 = 2;
            	int LA36_0 = input.LA(1);

            	if ( (LA36_0 == 41) )
            	{
            	    alt36 = 1;
            	}
            	switch (alt36) 
            	{
            	    case 1 :
            	        // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:262:209: 'else' LEFTPARANTHESIS ( (e12= ifloop ) | ) RIGHTPARANTHESIS
            	        {
            	        	string_literal119=(IToken)Match(input,41,FOLLOW_41_in_ifelse1557); 
            	        		string_literal119_tree = (object)adaptor.Create(string_literal119);
            	        		adaptor.AddChild(root_0, string_literal119_tree);

            	        	LEFTPARANTHESIS120=(IToken)Match(input,LEFTPARANTHESIS,FOLLOW_LEFTPARANTHESIS_in_ifelse1560); 
            	        		LEFTPARANTHESIS120_tree = (object)adaptor.Create(LEFTPARANTHESIS120);
            	        		adaptor.AddChild(root_0, LEFTPARANTHESIS120_tree);

            	        	// C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:262:233: ( (e12= ifloop ) | )
            	        	int alt35 = 2;
            	        	int LA35_0 = input.LA(1);

            	        	if ( (LA35_0 == VARIABLE || LA35_0 == VARTYPE || LA35_0 == STRINGTYPE || LA35_0 == 28 || LA35_0 == 32 || (LA35_0 >= 35 && LA35_0 <= 36) || LA35_0 == 40 || LA35_0 == 42 || (LA35_0 >= 46 && LA35_0 <= 48) || (LA35_0 >= 52 && LA35_0 <= 56)) )
            	        	{
            	        	    alt35 = 1;
            	        	}
            	        	else if ( (LA35_0 == RIGHTPARANTHESIS) )
            	        	{
            	        	    alt35 = 2;
            	        	}
            	        	else 
            	        	{
            	        	    NoViableAltException nvae_d35s0 =
            	        	        new NoViableAltException("", 35, 0, input);

            	        	    throw nvae_d35s0;
            	        	}
            	        	switch (alt35) 
            	        	{
            	        	    case 1 :
            	        	        // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:262:234: (e12= ifloop )
            	        	        {
            	        	        	// C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:262:234: (e12= ifloop )
            	        	        	// C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:262:235: e12= ifloop
            	        	        	{
            	        	        		PushFollow(FOLLOW_ifloop_in_ifelse1569);
            	        	        		e12 = ifloop();
            	        	        		state.followingStackPointer--;

            	        	        		adaptor.AddChild(root_0, e12.Tree);
            	        	        		retval.ret.ELSECODE = ((e12 != null) ? e12.ret : null);

            	        	        	}


            	        	        }
            	        	        break;
            	        	    case 2 :
            	        	        // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:262:283: 
            	        	        {
            	        	        }
            	        	        break;

            	        	}

            	        	RIGHTPARANTHESIS121=(IToken)Match(input,RIGHTPARANTHESIS,FOLLOW_RIGHTPARANTHESIS_in_ifelse1575); 
            	        		RIGHTPARANTHESIS121_tree = (object)adaptor.Create(RIGHTPARANTHESIS121);
            	        		adaptor.AddChild(root_0, RIGHTPARANTHESIS121_tree);


            	        }
            	        break;

            	}


            }

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

            	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 
    	{
        }
        return retval;
    }
示例#2
0
    // throws RecognitionException [1]
    // $ANTLR start "ifelse"
    // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:176:1: ifelse returns [IfStatementElement ret] : ( 'if' LEFTBRACE ( equality | nonequality ) RIGHTBRACE LEFTPARANTHESIS ( (e11= program ) | ) RIGHTPARANTHESIS ) ( 'else' LEFTPARANTHESIS ( (e12= program ) | ) RIGHTPARANTHESIS )? ;
    public spinachParser.ifelse_return ifelse()
    {
        spinachParser.ifelse_return retval = new spinachParser.ifelse_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken string_literal83 = null;
        IToken LEFTBRACE84 = null;
        IToken RIGHTBRACE87 = null;
        IToken LEFTPARANTHESIS88 = null;
        IToken RIGHTPARANTHESIS89 = null;
        IToken string_literal90 = null;
        IToken LEFTPARANTHESIS91 = null;
        IToken RIGHTPARANTHESIS92 = null;
        spinachParser.program_return e11 = null;

        spinachParser.program_return e12 = null;

        spinachParser.equality_return equality85 = null;

        spinachParser.nonequality_return nonequality86 = null;

        object string_literal83_tree=null;
        object LEFTBRACE84_tree=null;
        object RIGHTBRACE87_tree=null;
        object LEFTPARANTHESIS88_tree=null;
        object RIGHTPARANTHESIS89_tree=null;
        object string_literal90_tree=null;
        object LEFTPARANTHESIS91_tree=null;
        object RIGHTPARANTHESIS92_tree=null;

           retval.ret = new IfStatementElement();

        try
        {
            // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:180:1: ( ( 'if' LEFTBRACE ( equality | nonequality ) RIGHTBRACE LEFTPARANTHESIS ( (e11= program ) | ) RIGHTPARANTHESIS ) ( 'else' LEFTPARANTHESIS ( (e12= program ) | ) RIGHTPARANTHESIS )? )
            // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:180:2: ( 'if' LEFTBRACE ( equality | nonequality ) RIGHTBRACE LEFTPARANTHESIS ( (e11= program ) | ) RIGHTPARANTHESIS ) ( 'else' LEFTPARANTHESIS ( (e12= program ) | ) RIGHTPARANTHESIS )?
            {
                root_0 = (object)adaptor.GetNilNode();

                // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:180:2: ( 'if' LEFTBRACE ( equality | nonequality ) RIGHTBRACE LEFTPARANTHESIS ( (e11= program ) | ) RIGHTPARANTHESIS )
                // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:180:3: 'if' LEFTBRACE ( equality | nonequality ) RIGHTBRACE LEFTPARANTHESIS ( (e11= program ) | ) RIGHTPARANTHESIS
                {
                    string_literal83=(IToken)Match(input,36,FOLLOW_36_in_ifelse949);
                        string_literal83_tree = (object)adaptor.Create(string_literal83);
                        adaptor.AddChild(root_0, string_literal83_tree);

                    LEFTBRACE84=(IToken)Match(input,LEFTBRACE,FOLLOW_LEFTBRACE_in_ifelse951);
                        LEFTBRACE84_tree = (object)adaptor.Create(LEFTBRACE84);
                        adaptor.AddChild(root_0, LEFTBRACE84_tree);

                    // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:180:18: ( equality | nonequality )
                    int alt16 = 2;
                    int LA16_0 = input.LA(1);

                    if ( (LA16_0 == VARIABLE) )
                    {
                        int LA16_1 = input.LA(2);

                        if ( (LA16_1 == EQUALITYEXPRESSION) )
                        {
                            alt16 = 1;
                        }
                        else if ( (LA16_1 == NONEQUALITYEXPRESSION) )
                        {
                            alt16 = 2;
                        }
                        else
                        {
                            NoViableAltException nvae_d16s1 =
                                new NoViableAltException("", 16, 1, input);

                            throw nvae_d16s1;
                        }
                    }
                    else
                    {
                        NoViableAltException nvae_d16s0 =
                            new NoViableAltException("", 16, 0, input);

                        throw nvae_d16s0;
                    }
                    switch (alt16)
                    {
                        case 1 :
                            // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:180:19: equality
                            {
                                PushFollow(FOLLOW_equality_in_ifelse954);
                                equality85 = equality();
                                state.followingStackPointer--;

                                adaptor.AddChild(root_0, equality85.Tree);
                                retval.ret.CONDITION = ((equality85 != null) ? equality85.ret : null);

                            }
                            break;
                        case 2 :
                            // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:180:67: nonequality
                            {
                                PushFollow(FOLLOW_nonequality_in_ifelse957);
                                nonequality86 = nonequality();
                                state.followingStackPointer--;

                                adaptor.AddChild(root_0, nonequality86.Tree);
                                retval.ret.CONDITION = ((nonequality86 != null) ? nonequality86.ret : null);

                            }
                            break;

                    }

                    RIGHTBRACE87=(IToken)Match(input,RIGHTBRACE,FOLLOW_RIGHTBRACE_in_ifelse961);
                        RIGHTBRACE87_tree = (object)adaptor.Create(RIGHTBRACE87);
                        adaptor.AddChild(root_0, RIGHTBRACE87_tree);

                    LEFTPARANTHESIS88=(IToken)Match(input,LEFTPARANTHESIS,FOLLOW_LEFTPARANTHESIS_in_ifelse963);
                        LEFTPARANTHESIS88_tree = (object)adaptor.Create(LEFTPARANTHESIS88);
                        adaptor.AddChild(root_0, LEFTPARANTHESIS88_tree);

                    // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:180:149: ( (e11= program ) | )
                    int alt17 = 2;
                    int LA17_0 = input.LA(1);

                    if ( (LA17_0 == VARIABLE || LA17_0 == VARTYPE || LA17_0 == STRINGTYPE || LA17_0 == 23 || (LA17_0 >= 29 && LA17_0 <= 33) || LA17_0 == 36 || (LA17_0 >= 38 && LA17_0 <= 46)) )
                    {
                        alt17 = 1;
                    }
                    else if ( (LA17_0 == RIGHTPARANTHESIS) )
                    {
                        alt17 = 2;
                    }
                    else
                    {
                        NoViableAltException nvae_d17s0 =
                            new NoViableAltException("", 17, 0, input);

                        throw nvae_d17s0;
                    }
                    switch (alt17)
                    {
                        case 1 :
                            // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:180:150: (e11= program )
                            {
                                // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:180:150: (e11= program )
                                // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:180:151: e11= program
                                {
                                    PushFollow(FOLLOW_program_in_ifelse971);
                                    e11 = program();
                                    state.followingStackPointer--;

                                    adaptor.AddChild(root_0, e11.Tree);
                                    retval.ret.IFCODE = ((e11 != null) ? e11.ret : null);

                                }

                            }
                            break;
                        case 2 :
                            // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:180:197:
                            {
                            }
                            break;

                    }

                    RIGHTPARANTHESIS89=(IToken)Match(input,RIGHTPARANTHESIS,FOLLOW_RIGHTPARANTHESIS_in_ifelse976);
                        RIGHTPARANTHESIS89_tree = (object)adaptor.Create(RIGHTPARANTHESIS89);
                        adaptor.AddChild(root_0, RIGHTPARANTHESIS89_tree);

                }

                // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:180:215: ( 'else' LEFTPARANTHESIS ( (e12= program ) | ) RIGHTPARANTHESIS )?
                int alt19 = 2;
                int LA19_0 = input.LA(1);

                if ( (LA19_0 == 37) )
                {
                    alt19 = 1;
                }
                switch (alt19)
                {
                    case 1 :
                        // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:180:216: 'else' LEFTPARANTHESIS ( (e12= program ) | ) RIGHTPARANTHESIS
                        {
                            string_literal90=(IToken)Match(input,37,FOLLOW_37_in_ifelse979);
                                string_literal90_tree = (object)adaptor.Create(string_literal90);
                                adaptor.AddChild(root_0, string_literal90_tree);

                            LEFTPARANTHESIS91=(IToken)Match(input,LEFTPARANTHESIS,FOLLOW_LEFTPARANTHESIS_in_ifelse982);
                                LEFTPARANTHESIS91_tree = (object)adaptor.Create(LEFTPARANTHESIS91);
                                adaptor.AddChild(root_0, LEFTPARANTHESIS91_tree);

                            // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:180:240: ( (e12= program ) | )
                            int alt18 = 2;
                            int LA18_0 = input.LA(1);

                            if ( (LA18_0 == VARIABLE || LA18_0 == VARTYPE || LA18_0 == STRINGTYPE || LA18_0 == 23 || (LA18_0 >= 29 && LA18_0 <= 33) || LA18_0 == 36 || (LA18_0 >= 38 && LA18_0 <= 46)) )
                            {
                                alt18 = 1;
                            }
                            else if ( (LA18_0 == RIGHTPARANTHESIS) )
                            {
                                alt18 = 2;
                            }
                            else
                            {
                                NoViableAltException nvae_d18s0 =
                                    new NoViableAltException("", 18, 0, input);

                                throw nvae_d18s0;
                            }
                            switch (alt18)
                            {
                                case 1 :
                                    // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:180:241: (e12= program )
                                    {
                                        // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:180:241: (e12= program )
                                        // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:180:242: e12= program
                                        {
                                            PushFollow(FOLLOW_program_in_ifelse991);
                                            e12 = program();
                                            state.followingStackPointer--;

                                            adaptor.AddChild(root_0, e12.Tree);
                                            retval.ret.ELSECODE = ((e12 != null) ? e12.ret : null);

                                        }

                                    }
                                    break;
                                case 2 :
                                    // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:180:291:
                                    {
                                    }
                                    break;

                            }

                            RIGHTPARANTHESIS92=(IToken)Match(input,RIGHTPARANTHESIS,FOLLOW_RIGHTPARANTHESIS_in_ifelse997);
                                RIGHTPARANTHESIS92_tree = (object)adaptor.Create(RIGHTPARANTHESIS92);
                                adaptor.AddChild(root_0, RIGHTPARANTHESIS92_tree);

                        }
                        break;

                }

            }

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

                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
        {
        }
        return retval;
    }
示例#3
0
    // $ANTLR start "ifelse"
    // spinach.g:229:1: ifelse returns [IfStatementElement ret] : ( 'if' LEFTBRACE ( equality | nonequality | lessthan | lessthanequalto | greaterthan | greaterthanequalto ) RIGHTBRACE LEFTPARANTHESIS ( (e11= ifloop ) | ) RIGHTPARANTHESIS ) ( 'else' LEFTPARANTHESIS ( (e12= ifloop ) | ) RIGHTPARANTHESIS )? ;
    public spinachParser.ifelse_return ifelse() // throws RecognitionException [1]
    {   
        spinachParser.ifelse_return retval = new spinachParser.ifelse_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken string_literal88 = null;
        IToken LEFTBRACE89 = null;
        IToken RIGHTBRACE96 = null;
        IToken LEFTPARANTHESIS97 = null;
        IToken RIGHTPARANTHESIS98 = null;
        IToken string_literal99 = null;
        IToken LEFTPARANTHESIS100 = null;
        IToken RIGHTPARANTHESIS101 = null;
        spinachParser.ifloop_return e11 = null;

        spinachParser.ifloop_return e12 = null;

        spinachParser.equality_return equality90 = null;

        spinachParser.nonequality_return nonequality91 = null;

        spinachParser.lessthan_return lessthan92 = null;

        spinachParser.lessthanequalto_return lessthanequalto93 = null;

        spinachParser.greaterthan_return greaterthan94 = null;

        spinachParser.greaterthanequalto_return greaterthanequalto95 = null;


        object string_literal88_tree=null;
        object LEFTBRACE89_tree=null;
        object RIGHTBRACE96_tree=null;
        object LEFTPARANTHESIS97_tree=null;
        object RIGHTPARANTHESIS98_tree=null;
        object string_literal99_tree=null;
        object LEFTPARANTHESIS100_tree=null;
        object RIGHTPARANTHESIS101_tree=null;


           retval.ret = new IfStatementElement();

        try 
    	{
            // spinach.g:233:1: ( ( 'if' LEFTBRACE ( equality | nonequality | lessthan | lessthanequalto | greaterthan | greaterthanequalto ) RIGHTBRACE LEFTPARANTHESIS ( (e11= ifloop ) | ) RIGHTPARANTHESIS ) ( 'else' LEFTPARANTHESIS ( (e12= ifloop ) | ) RIGHTPARANTHESIS )? )
            // spinach.g:233:2: ( 'if' LEFTBRACE ( equality | nonequality | lessthan | lessthanequalto | greaterthan | greaterthanequalto ) RIGHTBRACE LEFTPARANTHESIS ( (e11= ifloop ) | ) RIGHTPARANTHESIS ) ( 'else' LEFTPARANTHESIS ( (e12= ifloop ) | ) RIGHTPARANTHESIS )?
            {
            	root_0 = (object)adaptor.GetNilNode();

            	// spinach.g:233:2: ( 'if' LEFTBRACE ( equality | nonequality | lessthan | lessthanequalto | greaterthan | greaterthanequalto ) RIGHTBRACE LEFTPARANTHESIS ( (e11= ifloop ) | ) RIGHTPARANTHESIS )
            	// spinach.g:233:3: 'if' LEFTBRACE ( equality | nonequality | lessthan | lessthanequalto | greaterthan | greaterthanequalto ) RIGHTBRACE LEFTPARANTHESIS ( (e11= ifloop ) | ) RIGHTPARANTHESIS
            	{
            		string_literal88=(IToken)Match(input,40,FOLLOW_40_in_ifelse1339); 
            			string_literal88_tree = (object)adaptor.Create(string_literal88);
            			adaptor.AddChild(root_0, string_literal88_tree);

            		LEFTBRACE89=(IToken)Match(input,LEFTBRACE,FOLLOW_LEFTBRACE_in_ifelse1341); 
            			LEFTBRACE89_tree = (object)adaptor.Create(LEFTBRACE89);
            			adaptor.AddChild(root_0, LEFTBRACE89_tree);

            		// spinach.g:233:18: ( equality | nonequality | lessthan | lessthanequalto | greaterthan | greaterthanequalto )
            		int alt25 = 6;
            		int LA25_0 = input.LA(1);

            		if ( (LA25_0 == VARIABLE) )
            		{
            		    switch ( input.LA(2) ) 
            		    {
            		    case NONEQUALITYEXPRESSION:
            		    	{
            		        alt25 = 2;
            		        }
            		        break;
            		    case EQUALITYEXPRESSION:
            		    	{
            		        alt25 = 1;
            		        }
            		        break;
            		    case LESSTHANEQUALTOEXPRESSION:
            		    	{
            		        alt25 = 4;
            		        }
            		        break;
            		    case LESSTHANEXPRESSION:
            		    	{
            		        alt25 = 3;
            		        }
            		        break;
            		    case GREATERTHANEQUALTOEXPRESSION:
            		    	{
            		        alt25 = 6;
            		        }
            		        break;
            		    case GREATERTHANEXPRESSION:
            		    	{
            		        alt25 = 5;
            		        }
            		        break;
            		    	default:
            		    	    NoViableAltException nvae_d25s1 =
            		    	        new NoViableAltException("", 25, 1, input);

            		    	    throw nvae_d25s1;
            		    }

            		}
            		else 
            		{
            		    NoViableAltException nvae_d25s0 =
            		        new NoViableAltException("", 25, 0, input);

            		    throw nvae_d25s0;
            		}
            		switch (alt25) 
            		{
            		    case 1 :
            		        // spinach.g:233:19: equality
            		        {
            		        	PushFollow(FOLLOW_equality_in_ifelse1344);
            		        	equality90 = equality();
            		        	state.followingStackPointer--;

            		        	adaptor.AddChild(root_0, equality90.Tree);
            		        	retval.ret.CONDITION = ((equality90 != null) ? equality90.ret : null);

            		        }
            		        break;
            		    case 2 :
            		        // spinach.g:233:67: nonequality
            		        {
            		        	PushFollow(FOLLOW_nonequality_in_ifelse1347);
            		        	nonequality91 = nonequality();
            		        	state.followingStackPointer--;

            		        	adaptor.AddChild(root_0, nonequality91.Tree);
            		        	retval.ret.CONDITION = ((nonequality91 != null) ? nonequality91.ret : null);

            		        }
            		        break;
            		    case 3 :
            		        // spinach.g:233:121: lessthan
            		        {
            		        	PushFollow(FOLLOW_lessthan_in_ifelse1350);
            		        	lessthan92 = lessthan();
            		        	state.followingStackPointer--;

            		        	adaptor.AddChild(root_0, lessthan92.Tree);
            		        	retval.ret.CONDITION = ((lessthan92 != null) ? lessthan92.ret : null);

            		        }
            		        break;
            		    case 4 :
            		        // spinach.g:234:4: lessthanequalto
            		        {
            		        	PushFollow(FOLLOW_lessthanequalto_in_ifelse1356);
            		        	lessthanequalto93 = lessthanequalto();
            		        	state.followingStackPointer--;

            		        	adaptor.AddChild(root_0, lessthanequalto93.Tree);
            		        	retval.ret.CONDITION = ((lessthanequalto93 != null) ? lessthanequalto93.ret : null);

            		        }
            		        break;
            		    case 5 :
            		        // spinach.g:234:66: greaterthan
            		        {
            		        	PushFollow(FOLLOW_greaterthan_in_ifelse1359);
            		        	greaterthan94 = greaterthan();
            		        	state.followingStackPointer--;

            		        	adaptor.AddChild(root_0, greaterthan94.Tree);
            		        	retval.ret.CONDITION =((greaterthan94 != null) ? greaterthan94.ret : null);

            		        }
            		        break;
            		    case 6 :
            		        // spinach.g:234:120: greaterthanequalto
            		        {
            		        	PushFollow(FOLLOW_greaterthanequalto_in_ifelse1363);
            		        	greaterthanequalto95 = greaterthanequalto();
            		        	state.followingStackPointer--;

            		        	adaptor.AddChild(root_0, greaterthanequalto95.Tree);
            		        	retval.ret.CONDITION = ((greaterthanequalto95 != null) ? greaterthanequalto95.ret : null);

            		        }
            		        break;

            		}

            		RIGHTBRACE96=(IToken)Match(input,RIGHTBRACE,FOLLOW_RIGHTBRACE_in_ifelse1368); 
            			RIGHTBRACE96_tree = (object)adaptor.Create(RIGHTBRACE96);
            			adaptor.AddChild(root_0, RIGHTBRACE96_tree);

            		LEFTPARANTHESIS97=(IToken)Match(input,LEFTPARANTHESIS,FOLLOW_LEFTPARANTHESIS_in_ifelse1370); 
            			LEFTPARANTHESIS97_tree = (object)adaptor.Create(LEFTPARANTHESIS97);
            			adaptor.AddChild(root_0, LEFTPARANTHESIS97_tree);

            		// spinach.g:235:30: ( (e11= ifloop ) | )
            		int alt26 = 2;
            		int LA26_0 = input.LA(1);

            		if ( (LA26_0 == VARIABLE || LA26_0 == VARTYPE || LA26_0 == STRINGTYPE || LA26_0 == 28 || LA26_0 == 32 || (LA26_0 >= 34 && LA26_0 <= 37) || LA26_0 == 40 || (LA26_0 >= 42 && LA26_0 <= 43) || (LA26_0 >= 46 && LA26_0 <= 48) || (LA26_0 >= 52 && LA26_0 <= 56)) )
            		{
            		    alt26 = 1;
            		}
            		else if ( (LA26_0 == RIGHTPARANTHESIS) )
            		{
            		    alt26 = 2;
            		}
            		else 
            		{
            		    NoViableAltException nvae_d26s0 =
            		        new NoViableAltException("", 26, 0, input);

            		    throw nvae_d26s0;
            		}
            		switch (alt26) 
            		{
            		    case 1 :
            		        // spinach.g:235:31: (e11= ifloop )
            		        {
            		        	// spinach.g:235:31: (e11= ifloop )
            		        	// spinach.g:235:32: e11= ifloop
            		        	{
            		        		PushFollow(FOLLOW_ifloop_in_ifelse1378);
            		        		e11 = ifloop();
            		        		state.followingStackPointer--;

            		        		adaptor.AddChild(root_0, e11.Tree);
            		        		retval.ret.IFCODE = ((e11 != null) ? e11.ret : null);

            		        	}


            		        }
            		        break;
            		    case 2 :
            		        // spinach.g:235:77: 
            		        {
            		        }
            		        break;

            		}

            		RIGHTPARANTHESIS98=(IToken)Match(input,RIGHTPARANTHESIS,FOLLOW_RIGHTPARANTHESIS_in_ifelse1383); 
            			RIGHTPARANTHESIS98_tree = (object)adaptor.Create(RIGHTPARANTHESIS98);
            			adaptor.AddChild(root_0, RIGHTPARANTHESIS98_tree);


            	}

            	// spinach.g:235:95: ( 'else' LEFTPARANTHESIS ( (e12= ifloop ) | ) RIGHTPARANTHESIS )?
            	int alt28 = 2;
            	int LA28_0 = input.LA(1);

            	if ( (LA28_0 == 41) )
            	{
            	    alt28 = 1;
            	}
            	switch (alt28) 
            	{
            	    case 1 :
            	        // spinach.g:235:96: 'else' LEFTPARANTHESIS ( (e12= ifloop ) | ) RIGHTPARANTHESIS
            	        {
            	        	string_literal99=(IToken)Match(input,41,FOLLOW_41_in_ifelse1386); 
            	        		string_literal99_tree = (object)adaptor.Create(string_literal99);
            	        		adaptor.AddChild(root_0, string_literal99_tree);

            	        	LEFTPARANTHESIS100=(IToken)Match(input,LEFTPARANTHESIS,FOLLOW_LEFTPARANTHESIS_in_ifelse1389); 
            	        		LEFTPARANTHESIS100_tree = (object)adaptor.Create(LEFTPARANTHESIS100);
            	        		adaptor.AddChild(root_0, LEFTPARANTHESIS100_tree);

            	        	// spinach.g:235:120: ( (e12= ifloop ) | )
            	        	int alt27 = 2;
            	        	int LA27_0 = input.LA(1);

            	        	if ( (LA27_0 == VARIABLE || LA27_0 == VARTYPE || LA27_0 == STRINGTYPE || LA27_0 == 28 || LA27_0 == 32 || (LA27_0 >= 34 && LA27_0 <= 37) || LA27_0 == 40 || (LA27_0 >= 42 && LA27_0 <= 43) || (LA27_0 >= 46 && LA27_0 <= 48) || (LA27_0 >= 52 && LA27_0 <= 56)) )
            	        	{
            	        	    alt27 = 1;
            	        	}
            	        	else if ( (LA27_0 == RIGHTPARANTHESIS) )
            	        	{
            	        	    alt27 = 2;
            	        	}
            	        	else 
            	        	{
            	        	    NoViableAltException nvae_d27s0 =
            	        	        new NoViableAltException("", 27, 0, input);

            	        	    throw nvae_d27s0;
            	        	}
            	        	switch (alt27) 
            	        	{
            	        	    case 1 :
            	        	        // spinach.g:235:121: (e12= ifloop )
            	        	        {
            	        	        	// spinach.g:235:121: (e12= ifloop )
            	        	        	// spinach.g:235:122: e12= ifloop
            	        	        	{
            	        	        		PushFollow(FOLLOW_ifloop_in_ifelse1398);
            	        	        		e12 = ifloop();
            	        	        		state.followingStackPointer--;

            	        	        		adaptor.AddChild(root_0, e12.Tree);
            	        	        		retval.ret.ELSECODE = ((e12 != null) ? e12.ret : null);

            	        	        	}


            	        	        }
            	        	        break;
            	        	    case 2 :
            	        	        // spinach.g:235:170: 
            	        	        {
            	        	        }
            	        	        break;

            	        	}

            	        	RIGHTPARANTHESIS101=(IToken)Match(input,RIGHTPARANTHESIS,FOLLOW_RIGHTPARANTHESIS_in_ifelse1404); 
            	        		RIGHTPARANTHESIS101_tree = (object)adaptor.Create(RIGHTPARANTHESIS101);
            	        		adaptor.AddChild(root_0, RIGHTPARANTHESIS101_tree);


            	        }
            	        break;

            	}


            }

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

            	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 
    	{
        }
        return retval;
    }
示例#4
0
    // $ANTLR start "ifelse"
    // spinach.g:241:1: ifelse returns [IfStatementElement ret] : ( 'if' LEFTBRACE ( varorstruct ) ( '==' | '!=' | '<' | '<=' | '>' | '>=' ) (e13= var_int_or_double_literal | e14= string_literal ) RIGHTBRACE LEFTPARANTHESIS ( (e11= ifloop ) | ) RIGHTPARANTHESIS ) ( 'else' LEFTPARANTHESIS ( (e12= ifloop ) | ) RIGHTPARANTHESIS )? ;
    public spinachParser.ifelse_return ifelse() // throws RecognitionException [1]
    {   
        spinachParser.ifelse_return retval = new spinachParser.ifelse_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken string_literal99 = null;
        IToken LEFTBRACE100 = null;
        IToken string_literal102 = null;
        IToken string_literal103 = null;
        IToken char_literal104 = null;
        IToken string_literal105 = null;
        IToken char_literal106 = null;
        IToken string_literal107 = null;
        IToken RIGHTBRACE108 = null;
        IToken LEFTPARANTHESIS109 = null;
        IToken RIGHTPARANTHESIS110 = null;
        IToken string_literal111 = null;
        IToken LEFTPARANTHESIS112 = null;
        IToken RIGHTPARANTHESIS113 = null;
        spinachParser.var_int_or_double_literal_return e13 = null;

        spinachParser.string_literal_return e14 = null;

        spinachParser.ifloop_return e11 = null;

        spinachParser.ifloop_return e12 = null;

        spinachParser.varorstruct_return varorstruct101 = null;


        object string_literal99_tree=null;
        object LEFTBRACE100_tree=null;
        object string_literal102_tree=null;
        object string_literal103_tree=null;
        object char_literal104_tree=null;
        object string_literal105_tree=null;
        object char_literal106_tree=null;
        object string_literal107_tree=null;
        object RIGHTBRACE108_tree=null;
        object LEFTPARANTHESIS109_tree=null;
        object RIGHTPARANTHESIS110_tree=null;
        object string_literal111_tree=null;
        object LEFTPARANTHESIS112_tree=null;
        object RIGHTPARANTHESIS113_tree=null;


           retval.ret = new IfStatementElement();

        try 
    	{
            // spinach.g:245:1: ( ( 'if' LEFTBRACE ( varorstruct ) ( '==' | '!=' | '<' | '<=' | '>' | '>=' ) (e13= var_int_or_double_literal | e14= string_literal ) RIGHTBRACE LEFTPARANTHESIS ( (e11= ifloop ) | ) RIGHTPARANTHESIS ) ( 'else' LEFTPARANTHESIS ( (e12= ifloop ) | ) RIGHTPARANTHESIS )? )
            // spinach.g:245:2: ( 'if' LEFTBRACE ( varorstruct ) ( '==' | '!=' | '<' | '<=' | '>' | '>=' ) (e13= var_int_or_double_literal | e14= string_literal ) RIGHTBRACE LEFTPARANTHESIS ( (e11= ifloop ) | ) RIGHTPARANTHESIS ) ( 'else' LEFTPARANTHESIS ( (e12= ifloop ) | ) RIGHTPARANTHESIS )?
            {
            	root_0 = (object)adaptor.GetNilNode();

            	// spinach.g:245:2: ( 'if' LEFTBRACE ( varorstruct ) ( '==' | '!=' | '<' | '<=' | '>' | '>=' ) (e13= var_int_or_double_literal | e14= string_literal ) RIGHTBRACE LEFTPARANTHESIS ( (e11= ifloop ) | ) RIGHTPARANTHESIS )
            	// spinach.g:245:3: 'if' LEFTBRACE ( varorstruct ) ( '==' | '!=' | '<' | '<=' | '>' | '>=' ) (e13= var_int_or_double_literal | e14= string_literal ) RIGHTBRACE LEFTPARANTHESIS ( (e11= ifloop ) | ) RIGHTPARANTHESIS
            	{
            		string_literal99=(IToken)Match(input,40,FOLLOW_40_in_ifelse1386); 
            			string_literal99_tree = (object)adaptor.Create(string_literal99);
            			adaptor.AddChild(root_0, string_literal99_tree);

            		LEFTBRACE100=(IToken)Match(input,LEFTBRACE,FOLLOW_LEFTBRACE_in_ifelse1388); 
            			LEFTBRACE100_tree = (object)adaptor.Create(LEFTBRACE100);
            			adaptor.AddChild(root_0, LEFTBRACE100_tree);

            		// spinach.g:245:18: ( varorstruct )
            		// spinach.g:245:19: varorstruct
            		{
            			PushFollow(FOLLOW_varorstruct_in_ifelse1391);
            			varorstruct101 = varorstruct();
            			state.followingStackPointer--;

            			adaptor.AddChild(root_0, varorstruct101.Tree);
            			retval.ret.setLhs(((varorstruct101 != null) ? varorstruct101.ret : null));

            		}

            		// spinach.g:245:69: ( '==' | '!=' | '<' | '<=' | '>' | '>=' )
            		int alt30 = 6;
            		switch ( input.LA(1) ) 
            		{
            		case EQUALITYEXPRESSION:
            			{
            		    alt30 = 1;
            		    }
            		    break;
            		case NONEQUALITYEXPRESSION:
            			{
            		    alt30 = 2;
            		    }
            		    break;
            		case LESSTHANEXPRESSION:
            			{
            		    alt30 = 3;
            		    }
            		    break;
            		case LESSTHANEQUALTOEXPRESSION:
            			{
            		    alt30 = 4;
            		    }
            		    break;
            		case GREATERTHANEXPRESSION:
            			{
            		    alt30 = 5;
            		    }
            		    break;
            		case GREATERTHANEQUALTOEXPRESSION:
            			{
            		    alt30 = 6;
            		    }
            		    break;
            			default:
            			    NoViableAltException nvae_d30s0 =
            			        new NoViableAltException("", 30, 0, input);

            			    throw nvae_d30s0;
            		}

            		switch (alt30) 
            		{
            		    case 1 :
            		        // spinach.g:246:7: '=='
            		        {
            		        	string_literal102=(IToken)Match(input,EQUALITYEXPRESSION,FOLLOW_EQUALITYEXPRESSION_in_ifelse1402); 
            		        		string_literal102_tree = (object)adaptor.Create(string_literal102);
            		        		adaptor.AddChild(root_0, string_literal102_tree);

            		        	 retval.ret.OP = "eq"; 

            		        }
            		        break;
            		    case 2 :
            		        // spinach.g:247:7: '!='
            		        {
            		        	string_literal103=(IToken)Match(input,NONEQUALITYEXPRESSION,FOLLOW_NONEQUALITYEXPRESSION_in_ifelse1412); 
            		        		string_literal103_tree = (object)adaptor.Create(string_literal103);
            		        		adaptor.AddChild(root_0, string_literal103_tree);

            		        	 retval.ret.OP = "ne"; 

            		        }
            		        break;
            		    case 3 :
            		        // spinach.g:248:7: '<'
            		        {
            		        	char_literal104=(IToken)Match(input,LESSTHANEXPRESSION,FOLLOW_LESSTHANEXPRESSION_in_ifelse1422); 
            		        		char_literal104_tree = (object)adaptor.Create(char_literal104);
            		        		adaptor.AddChild(root_0, char_literal104_tree);

            		        	 retval.ret.OP = "lt"; 

            		        }
            		        break;
            		    case 4 :
            		        // spinach.g:249:7: '<='
            		        {
            		        	string_literal105=(IToken)Match(input,LESSTHANEQUALTOEXPRESSION,FOLLOW_LESSTHANEQUALTOEXPRESSION_in_ifelse1433); 
            		        		string_literal105_tree = (object)adaptor.Create(string_literal105);
            		        		adaptor.AddChild(root_0, string_literal105_tree);

            		        	 retval.ret.OP = "le"; 

            		        }
            		        break;
            		    case 5 :
            		        // spinach.g:250:7: '>'
            		        {
            		        	char_literal106=(IToken)Match(input,GREATERTHANEXPRESSION,FOLLOW_GREATERTHANEXPRESSION_in_ifelse1443); 
            		        		char_literal106_tree = (object)adaptor.Create(char_literal106);
            		        		adaptor.AddChild(root_0, char_literal106_tree);

            		        	 retval.ret.OP = "gt"; 

            		        }
            		        break;
            		    case 6 :
            		        // spinach.g:251:7: '>='
            		        {
            		        	string_literal107=(IToken)Match(input,GREATERTHANEQUALTOEXPRESSION,FOLLOW_GREATERTHANEQUALTOEXPRESSION_in_ifelse1454); 
            		        		string_literal107_tree = (object)adaptor.Create(string_literal107);
            		        		adaptor.AddChild(root_0, string_literal107_tree);

            		        	 retval.ret.OP = "ge"; 

            		        }
            		        break;

            		}

            		// spinach.g:253:1: (e13= var_int_or_double_literal | e14= string_literal )
            		int alt31 = 2;
            		int LA31_0 = input.LA(1);

            		if ( ((LA31_0 >= VARIABLE && LA31_0 <= DOUBLE_LITERAL)) )
            		{
            		    alt31 = 1;
            		}
            		else if ( (LA31_0 == 27) )
            		{
            		    alt31 = 2;
            		}
            		else 
            		{
            		    NoViableAltException nvae_d31s0 =
            		        new NoViableAltException("", 31, 0, input);

            		    throw nvae_d31s0;
            		}
            		switch (alt31) 
            		{
            		    case 1 :
            		        // spinach.g:253:2: e13= var_int_or_double_literal
            		        {
            		        	PushFollow(FOLLOW_var_int_or_double_literal_in_ifelse1467);
            		        	e13 = var_int_or_double_literal();
            		        	state.followingStackPointer--;

            		        	adaptor.AddChild(root_0, e13.Tree);
            		        	retval.ret.setRhs(((e13 != null) ? e13.ret : null));

            		        }
            		        break;
            		    case 2 :
            		        // spinach.g:253:64: e14= string_literal
            		        {
            		        	PushFollow(FOLLOW_string_literal_in_ifelse1474);
            		        	e14 = string_literal();
            		        	state.followingStackPointer--;

            		        	adaptor.AddChild(root_0, e14.Tree);
            		        	retval.ret.setRhs(((e14 != null) ? e14.ret : null));

            		        }
            		        break;

            		}

            		RIGHTBRACE108=(IToken)Match(input,RIGHTBRACE,FOLLOW_RIGHTBRACE_in_ifelse1478); 
            			RIGHTBRACE108_tree = (object)adaptor.Create(RIGHTBRACE108);
            			adaptor.AddChild(root_0, RIGHTBRACE108_tree);

            		LEFTPARANTHESIS109=(IToken)Match(input,LEFTPARANTHESIS,FOLLOW_LEFTPARANTHESIS_in_ifelse1480); 
            			LEFTPARANTHESIS109_tree = (object)adaptor.Create(LEFTPARANTHESIS109);
            			adaptor.AddChild(root_0, LEFTPARANTHESIS109_tree);

            		// spinach.g:253:143: ( (e11= ifloop ) | )
            		int alt32 = 2;
            		int LA32_0 = input.LA(1);

            		if ( (LA32_0 == VARIABLE || LA32_0 == VARTYPE || LA32_0 == STRINGTYPE || LA32_0 == 28 || LA32_0 == 32 || (LA32_0 >= 35 && LA32_0 <= 36) || LA32_0 == 40 || LA32_0 == 42 || (LA32_0 >= 46 && LA32_0 <= 48) || (LA32_0 >= 52 && LA32_0 <= 56)) )
            		{
            		    alt32 = 1;
            		}
            		else if ( (LA32_0 == RIGHTPARANTHESIS) )
            		{
            		    alt32 = 2;
            		}
            		else 
            		{
            		    NoViableAltException nvae_d32s0 =
            		        new NoViableAltException("", 32, 0, input);

            		    throw nvae_d32s0;
            		}
            		switch (alt32) 
            		{
            		    case 1 :
            		        // spinach.g:253:144: (e11= ifloop )
            		        {
            		        	// spinach.g:253:144: (e11= ifloop )
            		        	// spinach.g:253:145: e11= ifloop
            		        	{
            		        		PushFollow(FOLLOW_ifloop_in_ifelse1488);
            		        		e11 = ifloop();
            		        		state.followingStackPointer--;

            		        		adaptor.AddChild(root_0, e11.Tree);
            		        		retval.ret.IFCODE = ((e11 != null) ? e11.ret : null);

            		        	}


            		        }
            		        break;
            		    case 2 :
            		        // spinach.g:253:190: 
            		        {
            		        }
            		        break;

            		}

            		RIGHTPARANTHESIS110=(IToken)Match(input,RIGHTPARANTHESIS,FOLLOW_RIGHTPARANTHESIS_in_ifelse1493); 
            			RIGHTPARANTHESIS110_tree = (object)adaptor.Create(RIGHTPARANTHESIS110);
            			adaptor.AddChild(root_0, RIGHTPARANTHESIS110_tree);


            	}

            	// spinach.g:253:208: ( 'else' LEFTPARANTHESIS ( (e12= ifloop ) | ) RIGHTPARANTHESIS )?
            	int alt34 = 2;
            	int LA34_0 = input.LA(1);

            	if ( (LA34_0 == 41) )
            	{
            	    alt34 = 1;
            	}
            	switch (alt34) 
            	{
            	    case 1 :
            	        // spinach.g:253:209: 'else' LEFTPARANTHESIS ( (e12= ifloop ) | ) RIGHTPARANTHESIS
            	        {
            	        	string_literal111=(IToken)Match(input,41,FOLLOW_41_in_ifelse1496); 
            	        		string_literal111_tree = (object)adaptor.Create(string_literal111);
            	        		adaptor.AddChild(root_0, string_literal111_tree);

            	        	LEFTPARANTHESIS112=(IToken)Match(input,LEFTPARANTHESIS,FOLLOW_LEFTPARANTHESIS_in_ifelse1499); 
            	        		LEFTPARANTHESIS112_tree = (object)adaptor.Create(LEFTPARANTHESIS112);
            	        		adaptor.AddChild(root_0, LEFTPARANTHESIS112_tree);

            	        	// spinach.g:253:233: ( (e12= ifloop ) | )
            	        	int alt33 = 2;
            	        	int LA33_0 = input.LA(1);

            	        	if ( (LA33_0 == VARIABLE || LA33_0 == VARTYPE || LA33_0 == STRINGTYPE || LA33_0 == 28 || LA33_0 == 32 || (LA33_0 >= 35 && LA33_0 <= 36) || LA33_0 == 40 || LA33_0 == 42 || (LA33_0 >= 46 && LA33_0 <= 48) || (LA33_0 >= 52 && LA33_0 <= 56)) )
            	        	{
            	        	    alt33 = 1;
            	        	}
            	        	else if ( (LA33_0 == RIGHTPARANTHESIS) )
            	        	{
            	        	    alt33 = 2;
            	        	}
            	        	else 
            	        	{
            	        	    NoViableAltException nvae_d33s0 =
            	        	        new NoViableAltException("", 33, 0, input);

            	        	    throw nvae_d33s0;
            	        	}
            	        	switch (alt33) 
            	        	{
            	        	    case 1 :
            	        	        // spinach.g:253:234: (e12= ifloop )
            	        	        {
            	        	        	// spinach.g:253:234: (e12= ifloop )
            	        	        	// spinach.g:253:235: e12= ifloop
            	        	        	{
            	        	        		PushFollow(FOLLOW_ifloop_in_ifelse1508);
            	        	        		e12 = ifloop();
            	        	        		state.followingStackPointer--;

            	        	        		adaptor.AddChild(root_0, e12.Tree);
            	        	        		retval.ret.ELSECODE = ((e12 != null) ? e12.ret : null);

            	        	        	}


            	        	        }
            	        	        break;
            	        	    case 2 :
            	        	        // spinach.g:253:283: 
            	        	        {
            	        	        }
            	        	        break;

            	        	}

            	        	RIGHTPARANTHESIS113=(IToken)Match(input,RIGHTPARANTHESIS,FOLLOW_RIGHTPARANTHESIS_in_ifelse1514); 
            	        		RIGHTPARANTHESIS113_tree = (object)adaptor.Create(RIGHTPARANTHESIS113);
            	        		adaptor.AddChild(root_0, RIGHTPARANTHESIS113_tree);


            	        }
            	        break;

            	}


            }

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

            	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 
    	{
        }
        return retval;
    }