Наследование: Antlr.Runtime.ParserRuleReturnScope
Пример #1
0
    // $ANTLR start "functiondefination"
    // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:290:1: functiondefination returns [FunctionElement ret] : ( ( VARTYPE variable '(' ( (e11= arguments ( ',' e12= arguments )* )? ) ')' '{' ( ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+ )? '}' ) | 'void' variable '(' ( (e11= arguments ( ',' e12= arguments )* )? ) ')' '{' ( ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+ )? '}' );
    public spinachParser.functiondefination_return functiondefination() // throws RecognitionException [1]
    {   
        spinachParser.functiondefination_return retval = new spinachParser.functiondefination_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken VARTYPE136 = null;
        IToken char_literal138 = null;
        IToken char_literal139 = null;
        IToken char_literal140 = null;
        IToken char_literal141 = null;
        IToken char_literal153 = null;
        IToken string_literal154 = null;
        IToken char_literal156 = null;
        IToken char_literal157 = null;
        IToken char_literal158 = null;
        IToken char_literal159 = null;
        IToken char_literal171 = null;
        spinachParser.arguments_return e11 = null;

        spinachParser.arguments_return e12 = null;

        spinachParser.variable_return variable137 = null;

        spinachParser.assignment_return assignment142 = null;

        spinachParser.functioncall_return functioncall143 = null;

        spinachParser.scalarvardec_return scalarvardec144 = null;

        spinachParser.vectorvardec_return vectorvardec145 = null;

        spinachParser.matrixvardec_return matrixvardec146 = null;

        spinachParser.deletionofvar_return deletionofvar147 = null;

        spinachParser.print_return print148 = null;

        spinachParser.ifelse_return ifelse149 = null;

        spinachParser.functionreturn_return functionreturn150 = null;

        spinachParser.parallelfor_return parallelfor151 = null;

        spinachParser.forstatement_return forstatement152 = null;

        spinachParser.variable_return variable155 = null;

        spinachParser.assignment_return assignment160 = null;

        spinachParser.functioncall_return functioncall161 = null;

        spinachParser.scalarvardec_return scalarvardec162 = null;

        spinachParser.vectorvardec_return vectorvardec163 = null;

        spinachParser.matrixvardec_return matrixvardec164 = null;

        spinachParser.deletionofvar_return deletionofvar165 = null;

        spinachParser.print_return print166 = null;

        spinachParser.ifelse_return ifelse167 = null;

        spinachParser.functionreturn_return functionreturn168 = null;

        spinachParser.parallelfor_return parallelfor169 = null;

        spinachParser.forstatement_return forstatement170 = null;


        object VARTYPE136_tree=null;
        object char_literal138_tree=null;
        object char_literal139_tree=null;
        object char_literal140_tree=null;
        object char_literal141_tree=null;
        object char_literal153_tree=null;
        object string_literal154_tree=null;
        object char_literal156_tree=null;
        object char_literal157_tree=null;
        object char_literal158_tree=null;
        object char_literal159_tree=null;
        object char_literal171_tree=null;


        retval.ret = new FunctionElement();

        try 
    	{
            // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:295:1: ( ( VARTYPE variable '(' ( (e11= arguments ( ',' e12= arguments )* )? ) ')' '{' ( ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+ )? '}' ) | 'void' variable '(' ( (e11= arguments ( ',' e12= arguments )* )? ) ')' '{' ( ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+ )? '}' )
            int alt51 = 2;
            int LA51_0 = input.LA(1);

            if ( (LA51_0 == VARTYPE) )
            {
                alt51 = 1;
            }
            else if ( (LA51_0 == 43) )
            {
                alt51 = 2;
            }
            else 
            {
                NoViableAltException nvae_d51s0 =
                    new NoViableAltException("", 51, 0, input);

                throw nvae_d51s0;
            }
            switch (alt51) 
            {
                case 1 :
                    // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:295:3: ( VARTYPE variable '(' ( (e11= arguments ( ',' e12= arguments )* )? ) ')' '{' ( ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+ )? '}' )
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	// C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:295:3: ( VARTYPE variable '(' ( (e11= arguments ( ',' e12= arguments )* )? ) ')' '{' ( ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+ )? '}' )
                    	// C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:295:4: VARTYPE variable '(' ( (e11= arguments ( ',' e12= arguments )* )? ) ')' '{' ( ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+ )? '}'
                    	{
                    		VARTYPE136=(IToken)Match(input,VARTYPE,FOLLOW_VARTYPE_in_functiondefination1750); 
                    			VARTYPE136_tree = (object)adaptor.Create(VARTYPE136);
                    			adaptor.AddChild(root_0, VARTYPE136_tree);

                    		retval.ret.setreturntype(((VARTYPE136 != null) ? VARTYPE136.Text : null));
                    		PushFollow(FOLLOW_variable_in_functiondefination1755);
                    		variable137 = variable();
                    		state.followingStackPointer--;

                    		adaptor.AddChild(root_0, variable137.Tree);
                    		retval.ret.setfunctionname(((variable137 != null) ? variable137.ret : null));
                    		char_literal138=(IToken)Match(input,LEFTBRACE,FOLLOW_LEFTBRACE_in_functiondefination1761); 
                    			char_literal138_tree = (object)adaptor.Create(char_literal138);
                    			adaptor.AddChild(root_0, char_literal138_tree);

                    		// C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:298:2: ( (e11= arguments ( ',' e12= arguments )* )? )
                    		// C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:298:3: (e11= arguments ( ',' e12= arguments )* )?
                    		{
                    			// C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:298:3: (e11= arguments ( ',' e12= arguments )* )?
                    			int alt44 = 2;
                    			int LA44_0 = input.LA(1);

                    			if ( (LA44_0 == VARTYPE || LA44_0 == 28 || LA44_0 == 32) )
                    			{
                    			    alt44 = 1;
                    			}
                    			switch (alt44) 
                    			{
                    			    case 1 :
                    			        // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:298:4: e11= arguments ( ',' e12= arguments )*
                    			        {
                    			        	PushFollow(FOLLOW_arguments_in_functiondefination1769);
                    			        	e11 = arguments();
                    			        	state.followingStackPointer--;

                    			        	adaptor.AddChild(root_0, e11.Tree);
                    			        	retval.ret.setArguments(((e11 != null) ? e11.ret : null));
                    			        	// C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:298:54: ( ',' e12= arguments )*
                    			        	do 
                    			        	{
                    			        	    int alt43 = 2;
                    			        	    int LA43_0 = input.LA(1);

                    			        	    if ( (LA43_0 == 31) )
                    			        	    {
                    			        	        alt43 = 1;
                    			        	    }


                    			        	    switch (alt43) 
                    			        		{
                    			        			case 1 :
                    			        			    // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:298:55: ',' e12= arguments
                    			        			    {
                    			        			    	char_literal139=(IToken)Match(input,31,FOLLOW_31_in_functiondefination1772); 
                    			        			    		char_literal139_tree = (object)adaptor.Create(char_literal139);
                    			        			    		adaptor.AddChild(root_0, char_literal139_tree);

                    			        			    	PushFollow(FOLLOW_arguments_in_functiondefination1777);
                    			        			    	e12 = arguments();
                    			        			    	state.followingStackPointer--;

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

                    			        			    }
                    			        			    break;

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

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


                    			        }
                    			        break;

                    			}


                    		}

                    		char_literal140=(IToken)Match(input,RIGHTBRACE,FOLLOW_RIGHTBRACE_in_functiondefination1786); 
                    			char_literal140_tree = (object)adaptor.Create(char_literal140);
                    			adaptor.AddChild(root_0, char_literal140_tree);

                    		char_literal141=(IToken)Match(input,LEFTPARANTHESIS,FOLLOW_LEFTPARANTHESIS_in_functiondefination1788); 
                    			char_literal141_tree = (object)adaptor.Create(char_literal141);
                    			adaptor.AddChild(root_0, char_literal141_tree);

                    		// C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:300:5: ( ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+ )?
                    		int alt46 = 2;
                    		int LA46_0 = input.LA(1);

                    		if ( (LA46_0 == VARIABLE || LA46_0 == VARTYPE || LA46_0 == STRINGTYPE || LA46_0 == 28 || LA46_0 == 32 || (LA46_0 >= 35 && LA46_0 <= 37) || LA46_0 == 40 || LA46_0 == 42 || LA46_0 == 47) )
                    		{
                    		    alt46 = 1;
                    		}
                    		switch (alt46) 
                    		{
                    		    case 1 :
                    		        // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:300:6: ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+
                    		        {
                    		        	// C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:300:6: ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+
                    		        	int cnt45 = 0;
                    		        	do 
                    		        	{
                    		        	    int alt45 = 12;
                    		        	    alt45 = dfa45.Predict(input);
                    		        	    switch (alt45) 
                    		        		{
                    		        			case 1 :
                    		        			    // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:300:7: assignment
                    		        			    {
                    		        			    	PushFollow(FOLLOW_assignment_in_functiondefination1792);
                    		        			    	assignment142 = assignment();
                    		        			    	state.followingStackPointer--;

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

                    		        			    }
                    		        			    break;
                    		        			case 2 :
                    		        			    // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:300:56: functioncall
                    		        			    {
                    		        			    	PushFollow(FOLLOW_functioncall_in_functiondefination1795);
                    		        			    	functioncall143 = functioncall();
                    		        			    	state.followingStackPointer--;

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

                    		        			    }
                    		        			    break;
                    		        			case 3 :
                    		        			    // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:300:110: scalarvardec
                    		        			    {
                    		        			    	PushFollow(FOLLOW_scalarvardec_in_functiondefination1799);
                    		        			    	scalarvardec144 = scalarvardec();
                    		        			    	state.followingStackPointer--;

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

                    		        			    }
                    		        			    break;
                    		        			case 4 :
                    		        			    // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:301:5: vectorvardec
                    		        			    {
                    		        			    	PushFollow(FOLLOW_vectorvardec_in_functiondefination1807);
                    		        			    	vectorvardec145 = vectorvardec();
                    		        			    	state.followingStackPointer--;

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

                    		        			    }
                    		        			    break;
                    		        			case 5 :
                    		        			    // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:302:5: matrixvardec
                    		        			    {
                    		        			    	PushFollow(FOLLOW_matrixvardec_in_functiondefination1815);
                    		        			    	matrixvardec146 = matrixvardec();
                    		        			    	state.followingStackPointer--;

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

                    		        			    }
                    		        			    break;
                    		        			case 6 :
                    		        			    // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:303:5: deletionofvar
                    		        			    {
                    		        			    	PushFollow(FOLLOW_deletionofvar_in_functiondefination1823);
                    		        			    	deletionofvar147 = deletionofvar();
                    		        			    	state.followingStackPointer--;

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

                    		        			    }
                    		        			    break;
                    		        			case 7 :
                    		        			    // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:303:64: print
                    		        			    {
                    		        			    	PushFollow(FOLLOW_print_in_functiondefination1829);
                    		        			    	print148 = print();
                    		        			    	state.followingStackPointer--;

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

                    		        			    }
                    		        			    break;
                    		        			case 8 :
                    		        			    // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:304:5: ifelse
                    		        			    {
                    		        			    	PushFollow(FOLLOW_ifelse_in_functiondefination1837);
                    		        			    	ifelse149 = ifelse();
                    		        			    	state.followingStackPointer--;

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

                    		        			    }
                    		        			    break;
                    		        			case 9 :
                    		        			    // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:304:47: functionreturn
                    		        			    {
                    		        			    	PushFollow(FOLLOW_functionreturn_in_functiondefination1841);
                    		        			    	functionreturn150 = functionreturn();
                    		        			    	state.followingStackPointer--;

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

                    		        			    }
                    		        			    break;
                    		        			case 10 :
                    		        			    // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:304:105: parallelfor
                    		        			    {
                    		        			    	PushFollow(FOLLOW_parallelfor_in_functiondefination1845);
                    		        			    	parallelfor151 = parallelfor();
                    		        			    	state.followingStackPointer--;

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

                    		        			    }
                    		        			    break;
                    		        			case 11 :
                    		        			    // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:304:157: forstatement
                    		        			    {
                    		        			    	PushFollow(FOLLOW_forstatement_in_functiondefination1849);
                    		        			    	forstatement152 = forstatement();
                    		        			    	state.followingStackPointer--;

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

                    		        			    }
                    		        			    break;

                    		        			default:
                    		        			    if ( cnt45 >= 1 ) goto loop45;
                    		        		            EarlyExitException eee45 =
                    		        		                new EarlyExitException(45, input);
                    		        		            throw eee45;
                    		        	    }
                    		        	    cnt45++;
                    		        	} while (true);

                    		        	loop45:
                    		        		;	// Stops C# compiler whinging that label 'loop45' has no statements


                    		        }
                    		        break;

                    		}

                    		char_literal153=(IToken)Match(input,RIGHTPARANTHESIS,FOLLOW_RIGHTPARANTHESIS_in_functiondefination1856); 
                    			char_literal153_tree = (object)adaptor.Create(char_literal153);
                    			adaptor.AddChild(root_0, char_literal153_tree);


                    	}


                    }
                    break;
                case 2 :
                    // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:305:6: 'void' variable '(' ( (e11= arguments ( ',' e12= arguments )* )? ) ')' '{' ( ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+ )? '}'
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	string_literal154=(IToken)Match(input,43,FOLLOW_43_in_functiondefination1859); 
                    		string_literal154_tree = (object)adaptor.Create(string_literal154);
                    		adaptor.AddChild(root_0, string_literal154_tree);

                    	retval.ret.setreturntype("void");
                    	PushFollow(FOLLOW_variable_in_functiondefination1864);
                    	variable155 = variable();
                    	state.followingStackPointer--;

                    	adaptor.AddChild(root_0, variable155.Tree);
                    	retval.ret.setfunctionname(((variable155 != null) ? variable155.ret : null));
                    	char_literal156=(IToken)Match(input,LEFTBRACE,FOLLOW_LEFTBRACE_in_functiondefination1870); 
                    		char_literal156_tree = (object)adaptor.Create(char_literal156);
                    		adaptor.AddChild(root_0, char_literal156_tree);

                    	// C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:308:2: ( (e11= arguments ( ',' e12= arguments )* )? )
                    	// C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:308:3: (e11= arguments ( ',' e12= arguments )* )?
                    	{
                    		// C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:308:3: (e11= arguments ( ',' e12= arguments )* )?
                    		int alt48 = 2;
                    		int LA48_0 = input.LA(1);

                    		if ( (LA48_0 == VARTYPE || LA48_0 == 28 || LA48_0 == 32) )
                    		{
                    		    alt48 = 1;
                    		}
                    		switch (alt48) 
                    		{
                    		    case 1 :
                    		        // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:308:4: e11= arguments ( ',' e12= arguments )*
                    		        {
                    		        	PushFollow(FOLLOW_arguments_in_functiondefination1879);
                    		        	e11 = arguments();
                    		        	state.followingStackPointer--;

                    		        	adaptor.AddChild(root_0, e11.Tree);
                    		        	retval.ret.setArguments(((e11 != null) ? e11.ret : null));
                    		        	// C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:308:55: ( ',' e12= arguments )*
                    		        	do 
                    		        	{
                    		        	    int alt47 = 2;
                    		        	    int LA47_0 = input.LA(1);

                    		        	    if ( (LA47_0 == 31) )
                    		        	    {
                    		        	        alt47 = 1;
                    		        	    }


                    		        	    switch (alt47) 
                    		        		{
                    		        			case 1 :
                    		        			    // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:308:56: ',' e12= arguments
                    		        			    {
                    		        			    	char_literal157=(IToken)Match(input,31,FOLLOW_31_in_functiondefination1882); 
                    		        			    		char_literal157_tree = (object)adaptor.Create(char_literal157);
                    		        			    		adaptor.AddChild(root_0, char_literal157_tree);

                    		        			    	PushFollow(FOLLOW_arguments_in_functiondefination1886);
                    		        			    	e12 = arguments();
                    		        			    	state.followingStackPointer--;

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

                    		        			    }
                    		        			    break;

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

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


                    		        }
                    		        break;

                    		}


                    	}

                    	char_literal158=(IToken)Match(input,RIGHTBRACE,FOLLOW_RIGHTBRACE_in_functiondefination1895); 
                    		char_literal158_tree = (object)adaptor.Create(char_literal158);
                    		adaptor.AddChild(root_0, char_literal158_tree);

                    	char_literal159=(IToken)Match(input,LEFTPARANTHESIS,FOLLOW_LEFTPARANTHESIS_in_functiondefination1897); 
                    		char_literal159_tree = (object)adaptor.Create(char_literal159);
                    		adaptor.AddChild(root_0, char_literal159_tree);

                    	// C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:310:5: ( ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+ )?
                    	int alt50 = 2;
                    	int LA50_0 = input.LA(1);

                    	if ( (LA50_0 == VARIABLE || LA50_0 == VARTYPE || LA50_0 == STRINGTYPE || LA50_0 == 28 || LA50_0 == 32 || (LA50_0 >= 35 && LA50_0 <= 37) || LA50_0 == 40 || LA50_0 == 42 || LA50_0 == 47) )
                    	{
                    	    alt50 = 1;
                    	}
                    	switch (alt50) 
                    	{
                    	    case 1 :
                    	        // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:310:6: ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+
                    	        {
                    	        	// C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:310:6: ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+
                    	        	int cnt49 = 0;
                    	        	do 
                    	        	{
                    	        	    int alt49 = 12;
                    	        	    alt49 = dfa49.Predict(input);
                    	        	    switch (alt49) 
                    	        		{
                    	        			case 1 :
                    	        			    // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:310:7: assignment
                    	        			    {
                    	        			    	PushFollow(FOLLOW_assignment_in_functiondefination1901);
                    	        			    	assignment160 = assignment();
                    	        			    	state.followingStackPointer--;

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

                    	        			    }
                    	        			    break;
                    	        			case 2 :
                    	        			    // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:310:56: functioncall
                    	        			    {
                    	        			    	PushFollow(FOLLOW_functioncall_in_functiondefination1904);
                    	        			    	functioncall161 = functioncall();
                    	        			    	state.followingStackPointer--;

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

                    	        			    }
                    	        			    break;
                    	        			case 3 :
                    	        			    // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:310:110: scalarvardec
                    	        			    {
                    	        			    	PushFollow(FOLLOW_scalarvardec_in_functiondefination1908);
                    	        			    	scalarvardec162 = scalarvardec();
                    	        			    	state.followingStackPointer--;

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

                    	        			    }
                    	        			    break;
                    	        			case 4 :
                    	        			    // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:311:5: vectorvardec
                    	        			    {
                    	        			    	PushFollow(FOLLOW_vectorvardec_in_functiondefination1916);
                    	        			    	vectorvardec163 = vectorvardec();
                    	        			    	state.followingStackPointer--;

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

                    	        			    }
                    	        			    break;
                    	        			case 5 :
                    	        			    // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:312:5: matrixvardec
                    	        			    {
                    	        			    	PushFollow(FOLLOW_matrixvardec_in_functiondefination1924);
                    	        			    	matrixvardec164 = matrixvardec();
                    	        			    	state.followingStackPointer--;

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

                    	        			    }
                    	        			    break;
                    	        			case 6 :
                    	        			    // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:313:5: deletionofvar
                    	        			    {
                    	        			    	PushFollow(FOLLOW_deletionofvar_in_functiondefination1932);
                    	        			    	deletionofvar165 = deletionofvar();
                    	        			    	state.followingStackPointer--;

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

                    	        			    }
                    	        			    break;
                    	        			case 7 :
                    	        			    // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:313:64: print
                    	        			    {
                    	        			    	PushFollow(FOLLOW_print_in_functiondefination1938);
                    	        			    	print166 = print();
                    	        			    	state.followingStackPointer--;

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

                    	        			    }
                    	        			    break;
                    	        			case 8 :
                    	        			    // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:314:5: ifelse
                    	        			    {
                    	        			    	PushFollow(FOLLOW_ifelse_in_functiondefination1946);
                    	        			    	ifelse167 = ifelse();
                    	        			    	state.followingStackPointer--;

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

                    	        			    }
                    	        			    break;
                    	        			case 9 :
                    	        			    // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:314:47: functionreturn
                    	        			    {
                    	        			    	PushFollow(FOLLOW_functionreturn_in_functiondefination1950);
                    	        			    	functionreturn168 = functionreturn();
                    	        			    	state.followingStackPointer--;

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

                    	        			    }
                    	        			    break;
                    	        			case 10 :
                    	        			    // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:314:105: parallelfor
                    	        			    {
                    	        			    	PushFollow(FOLLOW_parallelfor_in_functiondefination1954);
                    	        			    	parallelfor169 = parallelfor();
                    	        			    	state.followingStackPointer--;

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

                    	        			    }
                    	        			    break;
                    	        			case 11 :
                    	        			    // C:\\Documents and Settings\\Administrator\\Desktop\\Spinach\\InterpreterFrontEnd\\spinach.g:314:157: forstatement
                    	        			    {
                    	        			    	PushFollow(FOLLOW_forstatement_in_functiondefination1958);
                    	        			    	forstatement170 = forstatement();
                    	        			    	state.followingStackPointer--;

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

                    	        			    }
                    	        			    break;

                    	        			default:
                    	        			    if ( cnt49 >= 1 ) goto loop49;
                    	        		            EarlyExitException eee49 =
                    	        		                new EarlyExitException(49, input);
                    	        		            throw eee49;
                    	        	    }
                    	        	    cnt49++;
                    	        	} while (true);

                    	        	loop49:
                    	        		;	// Stops C# compiler whinging that label 'loop49' has no statements


                    	        }
                    	        break;

                    	}

                    	char_literal171=(IToken)Match(input,RIGHTPARANTHESIS,FOLLOW_RIGHTPARANTHESIS_in_functiondefination1965); 
                    		char_literal171_tree = (object)adaptor.Create(char_literal171);
                    		adaptor.AddChild(root_0, char_literal171_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
    // $ANTLR start "functiondefination"
    // spinach.g:285:1: functiondefination returns [FunctionElement ret] : ( ( VARTYPE variable '(' ( (e11= arguments ( ',' e12= arguments )* )? ) ')' '{' ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+ '}' ) | 'void' variable '(' ( (e11= arguments ( ',' e12= arguments )* )? ) ')' '{' ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+ '}' );
    public spinachParser.functiondefination_return functiondefination() // throws RecognitionException [1]
    {   
        spinachParser.functiondefination_return retval = new spinachParser.functiondefination_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken VARTYPE116 = null;
        IToken char_literal118 = null;
        IToken char_literal119 = null;
        IToken char_literal120 = null;
        IToken char_literal121 = null;
        IToken char_literal133 = null;
        IToken string_literal134 = null;
        IToken char_literal136 = null;
        IToken char_literal137 = null;
        IToken char_literal138 = null;
        IToken char_literal139 = null;
        IToken char_literal151 = null;
        spinachParser.arguments_return e11 = null;

        spinachParser.arguments_return e12 = null;

        spinachParser.variable_return variable117 = null;

        spinachParser.assignment_return assignment122 = null;

        spinachParser.functioncall_return functioncall123 = null;

        spinachParser.scalarvardec_return scalarvardec124 = null;

        spinachParser.vectorvardec_return vectorvardec125 = null;

        spinachParser.matrixvardec_return matrixvardec126 = null;

        spinachParser.deletionofvar_return deletionofvar127 = null;

        spinachParser.print_return print128 = null;

        spinachParser.ifelse_return ifelse129 = null;

        spinachParser.functionreturn_return functionreturn130 = null;

        spinachParser.parallelfor_return parallelfor131 = null;

        spinachParser.forstatement_return forstatement132 = null;

        spinachParser.variable_return variable135 = null;

        spinachParser.assignment_return assignment140 = null;

        spinachParser.functioncall_return functioncall141 = null;

        spinachParser.scalarvardec_return scalarvardec142 = null;

        spinachParser.vectorvardec_return vectorvardec143 = null;

        spinachParser.matrixvardec_return matrixvardec144 = null;

        spinachParser.deletionofvar_return deletionofvar145 = null;

        spinachParser.print_return print146 = null;

        spinachParser.ifelse_return ifelse147 = null;

        spinachParser.functionreturn_return functionreturn148 = null;

        spinachParser.parallelfor_return parallelfor149 = null;

        spinachParser.forstatement_return forstatement150 = null;


        object VARTYPE116_tree=null;
        object char_literal118_tree=null;
        object char_literal119_tree=null;
        object char_literal120_tree=null;
        object char_literal121_tree=null;
        object char_literal133_tree=null;
        object string_literal134_tree=null;
        object char_literal136_tree=null;
        object char_literal137_tree=null;
        object char_literal138_tree=null;
        object char_literal139_tree=null;
        object char_literal151_tree=null;


        retval.ret = new FunctionElement();

        try 
    	{
            // spinach.g:290:1: ( ( VARTYPE variable '(' ( (e11= arguments ( ',' e12= arguments )* )? ) ')' '{' ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+ '}' ) | 'void' variable '(' ( (e11= arguments ( ',' e12= arguments )* )? ) ')' '{' ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+ '}' )
            int alt39 = 2;
            int LA39_0 = input.LA(1);

            if ( (LA39_0 == VARTYPE) )
            {
                alt39 = 1;
            }
            else if ( (LA39_0 == 43) )
            {
                alt39 = 2;
            }
            else 
            {
                NoViableAltException nvae_d39s0 =
                    new NoViableAltException("", 39, 0, input);

                throw nvae_d39s0;
            }
            switch (alt39) 
            {
                case 1 :
                    // spinach.g:290:3: ( VARTYPE variable '(' ( (e11= arguments ( ',' e12= arguments )* )? ) ')' '{' ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+ '}' )
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	// spinach.g:290:3: ( VARTYPE variable '(' ( (e11= arguments ( ',' e12= arguments )* )? ) ')' '{' ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+ '}' )
                    	// spinach.g:290:4: VARTYPE variable '(' ( (e11= arguments ( ',' e12= arguments )* )? ) ')' '{' ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+ '}'
                    	{
                    		VARTYPE116=(IToken)Match(input,VARTYPE,FOLLOW_VARTYPE_in_functiondefination1655); 
                    			VARTYPE116_tree = (object)adaptor.Create(VARTYPE116);
                    			adaptor.AddChild(root_0, VARTYPE116_tree);

                    		retval.ret.setreturntype(((VARTYPE116 != null) ? VARTYPE116.Text : null));
                    		PushFollow(FOLLOW_variable_in_functiondefination1660);
                    		variable117 = variable();
                    		state.followingStackPointer--;

                    		adaptor.AddChild(root_0, variable117.Tree);
                    		retval.ret.setfunctionname(((variable117 != null) ? variable117.ret : null));
                    		char_literal118=(IToken)Match(input,LEFTBRACE,FOLLOW_LEFTBRACE_in_functiondefination1666); 
                    			char_literal118_tree = (object)adaptor.Create(char_literal118);
                    			adaptor.AddChild(root_0, char_literal118_tree);

                    		// spinach.g:293:2: ( (e11= arguments ( ',' e12= arguments )* )? )
                    		// spinach.g:293:3: (e11= arguments ( ',' e12= arguments )* )?
                    		{
                    			// spinach.g:293:3: (e11= arguments ( ',' e12= arguments )* )?
                    			int alt34 = 2;
                    			int LA34_0 = input.LA(1);

                    			if ( (LA34_0 == VARTYPE || LA34_0 == 28 || LA34_0 == 32) )
                    			{
                    			    alt34 = 1;
                    			}
                    			switch (alt34) 
                    			{
                    			    case 1 :
                    			        // spinach.g:293:4: e11= arguments ( ',' e12= arguments )*
                    			        {
                    			        	PushFollow(FOLLOW_arguments_in_functiondefination1674);
                    			        	e11 = arguments();
                    			        	state.followingStackPointer--;

                    			        	adaptor.AddChild(root_0, e11.Tree);
                    			        	retval.ret.setArguments(((e11 != null) ? e11.ret : null));
                    			        	// spinach.g:293:54: ( ',' e12= arguments )*
                    			        	do 
                    			        	{
                    			        	    int alt33 = 2;
                    			        	    int LA33_0 = input.LA(1);

                    			        	    if ( (LA33_0 == 31) )
                    			        	    {
                    			        	        alt33 = 1;
                    			        	    }


                    			        	    switch (alt33) 
                    			        		{
                    			        			case 1 :
                    			        			    // spinach.g:293:55: ',' e12= arguments
                    			        			    {
                    			        			    	char_literal119=(IToken)Match(input,31,FOLLOW_31_in_functiondefination1677); 
                    			        			    		char_literal119_tree = (object)adaptor.Create(char_literal119);
                    			        			    		adaptor.AddChild(root_0, char_literal119_tree);

                    			        			    	PushFollow(FOLLOW_arguments_in_functiondefination1682);
                    			        			    	e12 = arguments();
                    			        			    	state.followingStackPointer--;

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

                    			        			    }
                    			        			    break;

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

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


                    			        }
                    			        break;

                    			}


                    		}

                    		char_literal120=(IToken)Match(input,RIGHTBRACE,FOLLOW_RIGHTBRACE_in_functiondefination1691); 
                    			char_literal120_tree = (object)adaptor.Create(char_literal120);
                    			adaptor.AddChild(root_0, char_literal120_tree);

                    		char_literal121=(IToken)Match(input,LEFTPARANTHESIS,FOLLOW_LEFTPARANTHESIS_in_functiondefination1693); 
                    			char_literal121_tree = (object)adaptor.Create(char_literal121);
                    			adaptor.AddChild(root_0, char_literal121_tree);

                    		// spinach.g:295:5: ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+
                    		int cnt35 = 0;
                    		do 
                    		{
                    		    int alt35 = 12;
                    		    alt35 = dfa35.Predict(input);
                    		    switch (alt35) 
                    			{
                    				case 1 :
                    				    // spinach.g:295:6: assignment
                    				    {
                    				    	PushFollow(FOLLOW_assignment_in_functiondefination1696);
                    				    	assignment122 = assignment();
                    				    	state.followingStackPointer--;

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

                    				    }
                    				    break;
                    				case 2 :
                    				    // spinach.g:295:55: functioncall
                    				    {
                    				    	PushFollow(FOLLOW_functioncall_in_functiondefination1699);
                    				    	functioncall123 = functioncall();
                    				    	state.followingStackPointer--;

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

                    				    }
                    				    break;
                    				case 3 :
                    				    // spinach.g:295:109: scalarvardec
                    				    {
                    				    	PushFollow(FOLLOW_scalarvardec_in_functiondefination1703);
                    				    	scalarvardec124 = scalarvardec();
                    				    	state.followingStackPointer--;

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

                    				    }
                    				    break;
                    				case 4 :
                    				    // spinach.g:296:5: vectorvardec
                    				    {
                    				    	PushFollow(FOLLOW_vectorvardec_in_functiondefination1711);
                    				    	vectorvardec125 = vectorvardec();
                    				    	state.followingStackPointer--;

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

                    				    }
                    				    break;
                    				case 5 :
                    				    // spinach.g:297:5: matrixvardec
                    				    {
                    				    	PushFollow(FOLLOW_matrixvardec_in_functiondefination1719);
                    				    	matrixvardec126 = matrixvardec();
                    				    	state.followingStackPointer--;

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

                    				    }
                    				    break;
                    				case 6 :
                    				    // spinach.g:298:5: deletionofvar
                    				    {
                    				    	PushFollow(FOLLOW_deletionofvar_in_functiondefination1727);
                    				    	deletionofvar127 = deletionofvar();
                    				    	state.followingStackPointer--;

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

                    				    }
                    				    break;
                    				case 7 :
                    				    // spinach.g:298:64: print
                    				    {
                    				    	PushFollow(FOLLOW_print_in_functiondefination1733);
                    				    	print128 = print();
                    				    	state.followingStackPointer--;

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

                    				    }
                    				    break;
                    				case 8 :
                    				    // spinach.g:299:5: ifelse
                    				    {
                    				    	PushFollow(FOLLOW_ifelse_in_functiondefination1741);
                    				    	ifelse129 = ifelse();
                    				    	state.followingStackPointer--;

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

                    				    }
                    				    break;
                    				case 9 :
                    				    // spinach.g:299:47: functionreturn
                    				    {
                    				    	PushFollow(FOLLOW_functionreturn_in_functiondefination1745);
                    				    	functionreturn130 = functionreturn();
                    				    	state.followingStackPointer--;

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

                    				    }
                    				    break;
                    				case 10 :
                    				    // spinach.g:299:105: parallelfor
                    				    {
                    				    	PushFollow(FOLLOW_parallelfor_in_functiondefination1749);
                    				    	parallelfor131 = parallelfor();
                    				    	state.followingStackPointer--;

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

                    				    }
                    				    break;
                    				case 11 :
                    				    // spinach.g:299:157: forstatement
                    				    {
                    				    	PushFollow(FOLLOW_forstatement_in_functiondefination1753);
                    				    	forstatement132 = forstatement();
                    				    	state.followingStackPointer--;

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

                    				    }
                    				    break;

                    				default:
                    				    if ( cnt35 >= 1 ) goto loop35;
                    			            EarlyExitException eee35 =
                    			                new EarlyExitException(35, input);
                    			            throw eee35;
                    		    }
                    		    cnt35++;
                    		} while (true);

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

                    		char_literal133=(IToken)Match(input,RIGHTPARANTHESIS,FOLLOW_RIGHTPARANTHESIS_in_functiondefination1758); 
                    			char_literal133_tree = (object)adaptor.Create(char_literal133);
                    			adaptor.AddChild(root_0, char_literal133_tree);


                    	}


                    }
                    break;
                case 2 :
                    // spinach.g:300:6: 'void' variable '(' ( (e11= arguments ( ',' e12= arguments )* )? ) ')' '{' ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+ '}'
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	string_literal134=(IToken)Match(input,43,FOLLOW_43_in_functiondefination1761); 
                    		string_literal134_tree = (object)adaptor.Create(string_literal134);
                    		adaptor.AddChild(root_0, string_literal134_tree);

                    	retval.ret.setreturntype("void");
                    	PushFollow(FOLLOW_variable_in_functiondefination1766);
                    	variable135 = variable();
                    	state.followingStackPointer--;

                    	adaptor.AddChild(root_0, variable135.Tree);
                    	retval.ret.setfunctionname(((variable135 != null) ? variable135.ret : null));
                    	char_literal136=(IToken)Match(input,LEFTBRACE,FOLLOW_LEFTBRACE_in_functiondefination1772); 
                    		char_literal136_tree = (object)adaptor.Create(char_literal136);
                    		adaptor.AddChild(root_0, char_literal136_tree);

                    	// spinach.g:303:2: ( (e11= arguments ( ',' e12= arguments )* )? )
                    	// spinach.g:303:3: (e11= arguments ( ',' e12= arguments )* )?
                    	{
                    		// spinach.g:303:3: (e11= arguments ( ',' e12= arguments )* )?
                    		int alt37 = 2;
                    		int LA37_0 = input.LA(1);

                    		if ( (LA37_0 == VARTYPE || LA37_0 == 28 || LA37_0 == 32) )
                    		{
                    		    alt37 = 1;
                    		}
                    		switch (alt37) 
                    		{
                    		    case 1 :
                    		        // spinach.g:303:4: e11= arguments ( ',' e12= arguments )*
                    		        {
                    		        	PushFollow(FOLLOW_arguments_in_functiondefination1781);
                    		        	e11 = arguments();
                    		        	state.followingStackPointer--;

                    		        	adaptor.AddChild(root_0, e11.Tree);
                    		        	retval.ret.setArguments(((e11 != null) ? e11.ret : null));
                    		        	// spinach.g:303:55: ( ',' e12= arguments )*
                    		        	do 
                    		        	{
                    		        	    int alt36 = 2;
                    		        	    int LA36_0 = input.LA(1);

                    		        	    if ( (LA36_0 == 31) )
                    		        	    {
                    		        	        alt36 = 1;
                    		        	    }


                    		        	    switch (alt36) 
                    		        		{
                    		        			case 1 :
                    		        			    // spinach.g:303:56: ',' e12= arguments
                    		        			    {
                    		        			    	char_literal137=(IToken)Match(input,31,FOLLOW_31_in_functiondefination1784); 
                    		        			    		char_literal137_tree = (object)adaptor.Create(char_literal137);
                    		        			    		adaptor.AddChild(root_0, char_literal137_tree);

                    		        			    	PushFollow(FOLLOW_arguments_in_functiondefination1788);
                    		        			    	e12 = arguments();
                    		        			    	state.followingStackPointer--;

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

                    		        			    }
                    		        			    break;

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

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


                    		        }
                    		        break;

                    		}


                    	}

                    	char_literal138=(IToken)Match(input,RIGHTBRACE,FOLLOW_RIGHTBRACE_in_functiondefination1797); 
                    		char_literal138_tree = (object)adaptor.Create(char_literal138);
                    		adaptor.AddChild(root_0, char_literal138_tree);

                    	char_literal139=(IToken)Match(input,LEFTPARANTHESIS,FOLLOW_LEFTPARANTHESIS_in_functiondefination1799); 
                    		char_literal139_tree = (object)adaptor.Create(char_literal139);
                    		adaptor.AddChild(root_0, char_literal139_tree);

                    	// spinach.g:305:5: ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+
                    	int cnt38 = 0;
                    	do 
                    	{
                    	    int alt38 = 12;
                    	    alt38 = dfa38.Predict(input);
                    	    switch (alt38) 
                    		{
                    			case 1 :
                    			    // spinach.g:305:6: assignment
                    			    {
                    			    	PushFollow(FOLLOW_assignment_in_functiondefination1802);
                    			    	assignment140 = assignment();
                    			    	state.followingStackPointer--;

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

                    			    }
                    			    break;
                    			case 2 :
                    			    // spinach.g:305:55: functioncall
                    			    {
                    			    	PushFollow(FOLLOW_functioncall_in_functiondefination1805);
                    			    	functioncall141 = functioncall();
                    			    	state.followingStackPointer--;

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

                    			    }
                    			    break;
                    			case 3 :
                    			    // spinach.g:305:109: scalarvardec
                    			    {
                    			    	PushFollow(FOLLOW_scalarvardec_in_functiondefination1809);
                    			    	scalarvardec142 = scalarvardec();
                    			    	state.followingStackPointer--;

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

                    			    }
                    			    break;
                    			case 4 :
                    			    // spinach.g:306:5: vectorvardec
                    			    {
                    			    	PushFollow(FOLLOW_vectorvardec_in_functiondefination1817);
                    			    	vectorvardec143 = vectorvardec();
                    			    	state.followingStackPointer--;

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

                    			    }
                    			    break;
                    			case 5 :
                    			    // spinach.g:307:5: matrixvardec
                    			    {
                    			    	PushFollow(FOLLOW_matrixvardec_in_functiondefination1825);
                    			    	matrixvardec144 = matrixvardec();
                    			    	state.followingStackPointer--;

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

                    			    }
                    			    break;
                    			case 6 :
                    			    // spinach.g:308:5: deletionofvar
                    			    {
                    			    	PushFollow(FOLLOW_deletionofvar_in_functiondefination1833);
                    			    	deletionofvar145 = deletionofvar();
                    			    	state.followingStackPointer--;

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

                    			    }
                    			    break;
                    			case 7 :
                    			    // spinach.g:308:64: print
                    			    {
                    			    	PushFollow(FOLLOW_print_in_functiondefination1839);
                    			    	print146 = print();
                    			    	state.followingStackPointer--;

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

                    			    }
                    			    break;
                    			case 8 :
                    			    // spinach.g:309:5: ifelse
                    			    {
                    			    	PushFollow(FOLLOW_ifelse_in_functiondefination1847);
                    			    	ifelse147 = ifelse();
                    			    	state.followingStackPointer--;

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

                    			    }
                    			    break;
                    			case 9 :
                    			    // spinach.g:309:47: functionreturn
                    			    {
                    			    	PushFollow(FOLLOW_functionreturn_in_functiondefination1851);
                    			    	functionreturn148 = functionreturn();
                    			    	state.followingStackPointer--;

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

                    			    }
                    			    break;
                    			case 10 :
                    			    // spinach.g:309:105: parallelfor
                    			    {
                    			    	PushFollow(FOLLOW_parallelfor_in_functiondefination1855);
                    			    	parallelfor149 = parallelfor();
                    			    	state.followingStackPointer--;

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

                    			    }
                    			    break;
                    			case 11 :
                    			    // spinach.g:309:157: forstatement
                    			    {
                    			    	PushFollow(FOLLOW_forstatement_in_functiondefination1859);
                    			    	forstatement150 = forstatement();
                    			    	state.followingStackPointer--;

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

                    			    }
                    			    break;

                    			default:
                    			    if ( cnt38 >= 1 ) goto loop38;
                    		            EarlyExitException eee38 =
                    		                new EarlyExitException(38, input);
                    		            throw eee38;
                    	    }
                    	    cnt38++;
                    	} while (true);

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

                    	char_literal151=(IToken)Match(input,RIGHTPARANTHESIS,FOLLOW_RIGHTPARANTHESIS_in_functiondefination1864); 
                    		char_literal151_tree = (object)adaptor.Create(char_literal151);
                    		adaptor.AddChild(root_0, char_literal151_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 "functiondefination"
    // C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:281:1: functiondefination returns [FunctionElement ret] : ( ( VARTYPE variable '(' ( (e11= arguments ( ',' e12= arguments )* )? ) ')' '{' ( ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+ )? '}' ) | 'void' variable '(' ( (e11= arguments ( ',' e12= arguments )* )? ) ')' '{' ( ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+ )? '}' );
    public spinachParser.functiondefination_return functiondefination() // throws RecognitionException [1]
    {   
        spinachParser.functiondefination_return retval = new spinachParser.functiondefination_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken VARTYPE128 = null;
        IToken char_literal130 = null;
        IToken char_literal131 = null;
        IToken char_literal132 = null;
        IToken char_literal133 = null;
        IToken char_literal145 = null;
        IToken string_literal146 = null;
        IToken char_literal148 = null;
        IToken char_literal149 = null;
        IToken char_literal150 = null;
        IToken char_literal151 = null;
        IToken char_literal163 = null;
        spinachParser.arguments_return e11 = null;

        spinachParser.arguments_return e12 = null;

        spinachParser.variable_return variable129 = null;

        spinachParser.assignment_return assignment134 = null;

        spinachParser.functioncall_return functioncall135 = null;

        spinachParser.scalarvardec_return scalarvardec136 = null;

        spinachParser.vectorvardec_return vectorvardec137 = null;

        spinachParser.matrixvardec_return matrixvardec138 = null;

        spinachParser.deletionofvar_return deletionofvar139 = null;

        spinachParser.print_return print140 = null;

        spinachParser.ifelse_return ifelse141 = null;

        spinachParser.functionreturn_return functionreturn142 = null;

        spinachParser.parallelfor_return parallelfor143 = null;

        spinachParser.forstatement_return forstatement144 = null;

        spinachParser.variable_return variable147 = null;

        spinachParser.assignment_return assignment152 = null;

        spinachParser.functioncall_return functioncall153 = null;

        spinachParser.scalarvardec_return scalarvardec154 = null;

        spinachParser.vectorvardec_return vectorvardec155 = null;

        spinachParser.matrixvardec_return matrixvardec156 = null;

        spinachParser.deletionofvar_return deletionofvar157 = null;

        spinachParser.print_return print158 = null;

        spinachParser.ifelse_return ifelse159 = null;

        spinachParser.functionreturn_return functionreturn160 = null;

        spinachParser.parallelfor_return parallelfor161 = null;

        spinachParser.forstatement_return forstatement162 = null;


        object VARTYPE128_tree=null;
        object char_literal130_tree=null;
        object char_literal131_tree=null;
        object char_literal132_tree=null;
        object char_literal133_tree=null;
        object char_literal145_tree=null;
        object string_literal146_tree=null;
        object char_literal148_tree=null;
        object char_literal149_tree=null;
        object char_literal150_tree=null;
        object char_literal151_tree=null;
        object char_literal163_tree=null;


        retval.ret = new FunctionElement();

        try 
    	{
            // C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:286:1: ( ( VARTYPE variable '(' ( (e11= arguments ( ',' e12= arguments )* )? ) ')' '{' ( ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+ )? '}' ) | 'void' variable '(' ( (e11= arguments ( ',' e12= arguments )* )? ) ')' '{' ( ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+ )? '}' )
            int alt49 = 2;
            int LA49_0 = input.LA(1);

            if ( (LA49_0 == VARTYPE) )
            {
                alt49 = 1;
            }
            else if ( (LA49_0 == 43) )
            {
                alt49 = 2;
            }
            else 
            {
                NoViableAltException nvae_d49s0 =
                    new NoViableAltException("", 49, 0, input);

                throw nvae_d49s0;
            }
            switch (alt49) 
            {
                case 1 :
                    // C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:286:3: ( VARTYPE variable '(' ( (e11= arguments ( ',' e12= arguments )* )? ) ')' '{' ( ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+ )? '}' )
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	// C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:286:3: ( VARTYPE variable '(' ( (e11= arguments ( ',' e12= arguments )* )? ) ')' '{' ( ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+ )? '}' )
                    	// C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:286:4: VARTYPE variable '(' ( (e11= arguments ( ',' e12= arguments )* )? ) ')' '{' ( ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+ )? '}'
                    	{
                    		VARTYPE128=(IToken)Match(input,VARTYPE,FOLLOW_VARTYPE_in_functiondefination1689); 
                    			VARTYPE128_tree = (object)adaptor.Create(VARTYPE128);
                    			adaptor.AddChild(root_0, VARTYPE128_tree);

                    		retval.ret.setreturntype(((VARTYPE128 != null) ? VARTYPE128.Text : null));
                    		PushFollow(FOLLOW_variable_in_functiondefination1694);
                    		variable129 = variable();
                    		state.followingStackPointer--;

                    		adaptor.AddChild(root_0, variable129.Tree);
                    		retval.ret.setfunctionname(((variable129 != null) ? variable129.ret : null));
                    		char_literal130=(IToken)Match(input,LEFTBRACE,FOLLOW_LEFTBRACE_in_functiondefination1700); 
                    			char_literal130_tree = (object)adaptor.Create(char_literal130);
                    			adaptor.AddChild(root_0, char_literal130_tree);

                    		// C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:289:2: ( (e11= arguments ( ',' e12= arguments )* )? )
                    		// C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:289:3: (e11= arguments ( ',' e12= arguments )* )?
                    		{
                    			// C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:289:3: (e11= arguments ( ',' e12= arguments )* )?
                    			int alt42 = 2;
                    			int LA42_0 = input.LA(1);

                    			if ( (LA42_0 == VARTYPE || LA42_0 == 28 || LA42_0 == 32) )
                    			{
                    			    alt42 = 1;
                    			}
                    			switch (alt42) 
                    			{
                    			    case 1 :
                    			        // C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:289:4: e11= arguments ( ',' e12= arguments )*
                    			        {
                    			        	PushFollow(FOLLOW_arguments_in_functiondefination1708);
                    			        	e11 = arguments();
                    			        	state.followingStackPointer--;

                    			        	adaptor.AddChild(root_0, e11.Tree);
                    			        	retval.ret.setArguments(((e11 != null) ? e11.ret : null));
                    			        	// C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:289:54: ( ',' e12= arguments )*
                    			        	do 
                    			        	{
                    			        	    int alt41 = 2;
                    			        	    int LA41_0 = input.LA(1);

                    			        	    if ( (LA41_0 == 31) )
                    			        	    {
                    			        	        alt41 = 1;
                    			        	    }


                    			        	    switch (alt41) 
                    			        		{
                    			        			case 1 :
                    			        			    // C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:289:55: ',' e12= arguments
                    			        			    {
                    			        			    	char_literal131=(IToken)Match(input,31,FOLLOW_31_in_functiondefination1711); 
                    			        			    		char_literal131_tree = (object)adaptor.Create(char_literal131);
                    			        			    		adaptor.AddChild(root_0, char_literal131_tree);

                    			        			    	PushFollow(FOLLOW_arguments_in_functiondefination1716);
                    			        			    	e12 = arguments();
                    			        			    	state.followingStackPointer--;

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

                    			        			    }
                    			        			    break;

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

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


                    			        }
                    			        break;

                    			}


                    		}

                    		char_literal132=(IToken)Match(input,RIGHTBRACE,FOLLOW_RIGHTBRACE_in_functiondefination1725); 
                    			char_literal132_tree = (object)adaptor.Create(char_literal132);
                    			adaptor.AddChild(root_0, char_literal132_tree);

                    		char_literal133=(IToken)Match(input,LEFTPARANTHESIS,FOLLOW_LEFTPARANTHESIS_in_functiondefination1727); 
                    			char_literal133_tree = (object)adaptor.Create(char_literal133);
                    			adaptor.AddChild(root_0, char_literal133_tree);

                    		// C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:291:5: ( ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+ )?
                    		int alt44 = 2;
                    		int LA44_0 = input.LA(1);

                    		if ( (LA44_0 == VARIABLE || LA44_0 == VARTYPE || LA44_0 == STRINGTYPE || LA44_0 == 28 || LA44_0 == 32 || (LA44_0 >= 35 && LA44_0 <= 37) || LA44_0 == 40 || LA44_0 == 42 || LA44_0 == 47) )
                    		{
                    		    alt44 = 1;
                    		}
                    		switch (alt44) 
                    		{
                    		    case 1 :
                    		        // C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:291:6: ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+
                    		        {
                    		        	// C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:291:6: ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+
                    		        	int cnt43 = 0;
                    		        	do 
                    		        	{
                    		        	    int alt43 = 12;
                    		        	    alt43 = dfa43.Predict(input);
                    		        	    switch (alt43) 
                    		        		{
                    		        			case 1 :
                    		        			    // C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:291:7: assignment
                    		        			    {
                    		        			    	PushFollow(FOLLOW_assignment_in_functiondefination1731);
                    		        			    	assignment134 = assignment();
                    		        			    	state.followingStackPointer--;

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

                    		        			    }
                    		        			    break;
                    		        			case 2 :
                    		        			    // C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:291:56: functioncall
                    		        			    {
                    		        			    	PushFollow(FOLLOW_functioncall_in_functiondefination1734);
                    		        			    	functioncall135 = functioncall();
                    		        			    	state.followingStackPointer--;

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

                    		        			    }
                    		        			    break;
                    		        			case 3 :
                    		        			    // C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:291:110: scalarvardec
                    		        			    {
                    		        			    	PushFollow(FOLLOW_scalarvardec_in_functiondefination1738);
                    		        			    	scalarvardec136 = scalarvardec();
                    		        			    	state.followingStackPointer--;

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

                    		        			    }
                    		        			    break;
                    		        			case 4 :
                    		        			    // C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:292:5: vectorvardec
                    		        			    {
                    		        			    	PushFollow(FOLLOW_vectorvardec_in_functiondefination1746);
                    		        			    	vectorvardec137 = vectorvardec();
                    		        			    	state.followingStackPointer--;

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

                    		        			    }
                    		        			    break;
                    		        			case 5 :
                    		        			    // C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:293:5: matrixvardec
                    		        			    {
                    		        			    	PushFollow(FOLLOW_matrixvardec_in_functiondefination1754);
                    		        			    	matrixvardec138 = matrixvardec();
                    		        			    	state.followingStackPointer--;

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

                    		        			    }
                    		        			    break;
                    		        			case 6 :
                    		        			    // C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:294:5: deletionofvar
                    		        			    {
                    		        			    	PushFollow(FOLLOW_deletionofvar_in_functiondefination1762);
                    		        			    	deletionofvar139 = deletionofvar();
                    		        			    	state.followingStackPointer--;

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

                    		        			    }
                    		        			    break;
                    		        			case 7 :
                    		        			    // C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:294:64: print
                    		        			    {
                    		        			    	PushFollow(FOLLOW_print_in_functiondefination1768);
                    		        			    	print140 = print();
                    		        			    	state.followingStackPointer--;

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

                    		        			    }
                    		        			    break;
                    		        			case 8 :
                    		        			    // C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:295:5: ifelse
                    		        			    {
                    		        			    	PushFollow(FOLLOW_ifelse_in_functiondefination1776);
                    		        			    	ifelse141 = ifelse();
                    		        			    	state.followingStackPointer--;

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

                    		        			    }
                    		        			    break;
                    		        			case 9 :
                    		        			    // C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:295:47: functionreturn
                    		        			    {
                    		        			    	PushFollow(FOLLOW_functionreturn_in_functiondefination1780);
                    		        			    	functionreturn142 = functionreturn();
                    		        			    	state.followingStackPointer--;

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

                    		        			    }
                    		        			    break;
                    		        			case 10 :
                    		        			    // C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:295:105: parallelfor
                    		        			    {
                    		        			    	PushFollow(FOLLOW_parallelfor_in_functiondefination1784);
                    		        			    	parallelfor143 = parallelfor();
                    		        			    	state.followingStackPointer--;

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

                    		        			    }
                    		        			    break;
                    		        			case 11 :
                    		        			    // C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:295:157: forstatement
                    		        			    {
                    		        			    	PushFollow(FOLLOW_forstatement_in_functiondefination1788);
                    		        			    	forstatement144 = forstatement();
                    		        			    	state.followingStackPointer--;

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

                    		        			    }
                    		        			    break;

                    		        			default:
                    		        			    if ( cnt43 >= 1 ) goto loop43;
                    		        		            EarlyExitException eee43 =
                    		        		                new EarlyExitException(43, input);
                    		        		            throw eee43;
                    		        	    }
                    		        	    cnt43++;
                    		        	} while (true);

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


                    		        }
                    		        break;

                    		}

                    		char_literal145=(IToken)Match(input,RIGHTPARANTHESIS,FOLLOW_RIGHTPARANTHESIS_in_functiondefination1795); 
                    			char_literal145_tree = (object)adaptor.Create(char_literal145);
                    			adaptor.AddChild(root_0, char_literal145_tree);


                    	}


                    }
                    break;
                case 2 :
                    // C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:296:6: 'void' variable '(' ( (e11= arguments ( ',' e12= arguments )* )? ) ')' '{' ( ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+ )? '}'
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	string_literal146=(IToken)Match(input,43,FOLLOW_43_in_functiondefination1798); 
                    		string_literal146_tree = (object)adaptor.Create(string_literal146);
                    		adaptor.AddChild(root_0, string_literal146_tree);

                    	retval.ret.setreturntype("void");
                    	PushFollow(FOLLOW_variable_in_functiondefination1803);
                    	variable147 = variable();
                    	state.followingStackPointer--;

                    	adaptor.AddChild(root_0, variable147.Tree);
                    	retval.ret.setfunctionname(((variable147 != null) ? variable147.ret : null));
                    	char_literal148=(IToken)Match(input,LEFTBRACE,FOLLOW_LEFTBRACE_in_functiondefination1809); 
                    		char_literal148_tree = (object)adaptor.Create(char_literal148);
                    		adaptor.AddChild(root_0, char_literal148_tree);

                    	// C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:299:2: ( (e11= arguments ( ',' e12= arguments )* )? )
                    	// C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:299:3: (e11= arguments ( ',' e12= arguments )* )?
                    	{
                    		// C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:299:3: (e11= arguments ( ',' e12= arguments )* )?
                    		int alt46 = 2;
                    		int LA46_0 = input.LA(1);

                    		if ( (LA46_0 == VARTYPE || LA46_0 == 28 || LA46_0 == 32) )
                    		{
                    		    alt46 = 1;
                    		}
                    		switch (alt46) 
                    		{
                    		    case 1 :
                    		        // C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:299:4: e11= arguments ( ',' e12= arguments )*
                    		        {
                    		        	PushFollow(FOLLOW_arguments_in_functiondefination1818);
                    		        	e11 = arguments();
                    		        	state.followingStackPointer--;

                    		        	adaptor.AddChild(root_0, e11.Tree);
                    		        	retval.ret.setArguments(((e11 != null) ? e11.ret : null));
                    		        	// C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:299:55: ( ',' e12= arguments )*
                    		        	do 
                    		        	{
                    		        	    int alt45 = 2;
                    		        	    int LA45_0 = input.LA(1);

                    		        	    if ( (LA45_0 == 31) )
                    		        	    {
                    		        	        alt45 = 1;
                    		        	    }


                    		        	    switch (alt45) 
                    		        		{
                    		        			case 1 :
                    		        			    // C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:299:56: ',' e12= arguments
                    		        			    {
                    		        			    	char_literal149=(IToken)Match(input,31,FOLLOW_31_in_functiondefination1821); 
                    		        			    		char_literal149_tree = (object)adaptor.Create(char_literal149);
                    		        			    		adaptor.AddChild(root_0, char_literal149_tree);

                    		        			    	PushFollow(FOLLOW_arguments_in_functiondefination1825);
                    		        			    	e12 = arguments();
                    		        			    	state.followingStackPointer--;

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

                    		        			    }
                    		        			    break;

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

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


                    		        }
                    		        break;

                    		}


                    	}

                    	char_literal150=(IToken)Match(input,RIGHTBRACE,FOLLOW_RIGHTBRACE_in_functiondefination1834); 
                    		char_literal150_tree = (object)adaptor.Create(char_literal150);
                    		adaptor.AddChild(root_0, char_literal150_tree);

                    	char_literal151=(IToken)Match(input,LEFTPARANTHESIS,FOLLOW_LEFTPARANTHESIS_in_functiondefination1836); 
                    		char_literal151_tree = (object)adaptor.Create(char_literal151);
                    		adaptor.AddChild(root_0, char_literal151_tree);

                    	// C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:301:5: ( ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+ )?
                    	int alt48 = 2;
                    	int LA48_0 = input.LA(1);

                    	if ( (LA48_0 == VARIABLE || LA48_0 == VARTYPE || LA48_0 == STRINGTYPE || LA48_0 == 28 || LA48_0 == 32 || (LA48_0 >= 35 && LA48_0 <= 37) || LA48_0 == 40 || LA48_0 == 42 || LA48_0 == 47) )
                    	{
                    	    alt48 = 1;
                    	}
                    	switch (alt48) 
                    	{
                    	    case 1 :
                    	        // C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:301:6: ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+
                    	        {
                    	        	// C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:301:6: ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement )+
                    	        	int cnt47 = 0;
                    	        	do 
                    	        	{
                    	        	    int alt47 = 12;
                    	        	    alt47 = dfa47.Predict(input);
                    	        	    switch (alt47) 
                    	        		{
                    	        			case 1 :
                    	        			    // C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:301:7: assignment
                    	        			    {
                    	        			    	PushFollow(FOLLOW_assignment_in_functiondefination1840);
                    	        			    	assignment152 = assignment();
                    	        			    	state.followingStackPointer--;

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

                    	        			    }
                    	        			    break;
                    	        			case 2 :
                    	        			    // C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:301:56: functioncall
                    	        			    {
                    	        			    	PushFollow(FOLLOW_functioncall_in_functiondefination1843);
                    	        			    	functioncall153 = functioncall();
                    	        			    	state.followingStackPointer--;

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

                    	        			    }
                    	        			    break;
                    	        			case 3 :
                    	        			    // C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:301:110: scalarvardec
                    	        			    {
                    	        			    	PushFollow(FOLLOW_scalarvardec_in_functiondefination1847);
                    	        			    	scalarvardec154 = scalarvardec();
                    	        			    	state.followingStackPointer--;

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

                    	        			    }
                    	        			    break;
                    	        			case 4 :
                    	        			    // C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:302:5: vectorvardec
                    	        			    {
                    	        			    	PushFollow(FOLLOW_vectorvardec_in_functiondefination1855);
                    	        			    	vectorvardec155 = vectorvardec();
                    	        			    	state.followingStackPointer--;

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

                    	        			    }
                    	        			    break;
                    	        			case 5 :
                    	        			    // C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:303:5: matrixvardec
                    	        			    {
                    	        			    	PushFollow(FOLLOW_matrixvardec_in_functiondefination1863);
                    	        			    	matrixvardec156 = matrixvardec();
                    	        			    	state.followingStackPointer--;

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

                    	        			    }
                    	        			    break;
                    	        			case 6 :
                    	        			    // C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:304:5: deletionofvar
                    	        			    {
                    	        			    	PushFollow(FOLLOW_deletionofvar_in_functiondefination1871);
                    	        			    	deletionofvar157 = deletionofvar();
                    	        			    	state.followingStackPointer--;

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

                    	        			    }
                    	        			    break;
                    	        			case 7 :
                    	        			    // C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:304:64: print
                    	        			    {
                    	        			    	PushFollow(FOLLOW_print_in_functiondefination1877);
                    	        			    	print158 = print();
                    	        			    	state.followingStackPointer--;

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

                    	        			    }
                    	        			    break;
                    	        			case 8 :
                    	        			    // C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:305:5: ifelse
                    	        			    {
                    	        			    	PushFollow(FOLLOW_ifelse_in_functiondefination1885);
                    	        			    	ifelse159 = ifelse();
                    	        			    	state.followingStackPointer--;

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

                    	        			    }
                    	        			    break;
                    	        			case 9 :
                    	        			    // C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:305:47: functionreturn
                    	        			    {
                    	        			    	PushFollow(FOLLOW_functionreturn_in_functiondefination1889);
                    	        			    	functionreturn160 = functionreturn();
                    	        			    	state.followingStackPointer--;

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

                    	        			    }
                    	        			    break;
                    	        			case 10 :
                    	        			    // C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:305:105: parallelfor
                    	        			    {
                    	        			    	PushFollow(FOLLOW_parallelfor_in_functiondefination1893);
                    	        			    	parallelfor161 = parallelfor();
                    	        			    	state.followingStackPointer--;

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

                    	        			    }
                    	        			    break;
                    	        			case 11 :
                    	        			    // C:\\Users\\KULDEEP GANDHI\\Desktop\\pinac\\Spinach\\InterpreterFrontEnd\\spinach.g:305:157: forstatement
                    	        			    {
                    	        			    	PushFollow(FOLLOW_forstatement_in_functiondefination1897);
                    	        			    	forstatement162 = forstatement();
                    	        			    	state.followingStackPointer--;

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

                    	        			    }
                    	        			    break;

                    	        			default:
                    	        			    if ( cnt47 >= 1 ) goto loop47;
                    	        		            EarlyExitException eee47 =
                    	        		                new EarlyExitException(47, input);
                    	        		            throw eee47;
                    	        	    }
                    	        	    cnt47++;
                    	        	} while (true);

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


                    	        }
                    	        break;

                    	}

                    	char_literal163=(IToken)Match(input,RIGHTPARANTHESIS,FOLLOW_RIGHTPARANTHESIS_in_functiondefination1904); 
                    		char_literal163_tree = (object)adaptor.Create(char_literal163);
                    		adaptor.AddChild(root_0, char_literal163_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
    // throws RecognitionException [1]
    // $ANTLR start "functiondefination"
    // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:222:1: functiondefination returns [FunctionElement ret] : ( ( VARTYPE variable '(' ( (e11= functiondeclaration ( ',' e12= functiondeclaration )* )? ) ')' '{' ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn )+ '}' ) | 'void' variable '(' ( (e11= functiondeclaration ( ',' e12= functiondeclaration )* )? ) ')' '{' ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn )+ '}' );
    public spinachParser.functiondefination_return functiondefination()
    {
        spinachParser.functiondefination_return retval = new spinachParser.functiondefination_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken VARTYPE107 = null;
        IToken char_literal109 = null;
        IToken char_literal110 = null;
        IToken char_literal111 = null;
        IToken char_literal112 = null;
        IToken char_literal122 = null;
        IToken string_literal123 = null;
        IToken char_literal125 = null;
        IToken char_literal126 = null;
        IToken char_literal127 = null;
        IToken char_literal128 = null;
        IToken char_literal138 = null;
        spinachParser.functiondeclaration_return e11 = null;

        spinachParser.functiondeclaration_return e12 = null;

        spinachParser.variable_return variable108 = null;

        spinachParser.assignment_return assignment113 = null;

        spinachParser.functioncall_return functioncall114 = null;

        spinachParser.scalarvardec_return scalarvardec115 = null;

        spinachParser.vectorvardec_return vectorvardec116 = null;

        spinachParser.matrixvardec_return matrixvardec117 = null;

        spinachParser.deletionofvar_return deletionofvar118 = null;

        spinachParser.print_return print119 = null;

        spinachParser.ifelse_return ifelse120 = null;

        spinachParser.functionreturn_return functionreturn121 = null;

        spinachParser.variable_return variable124 = null;

        spinachParser.assignment_return assignment129 = null;

        spinachParser.functioncall_return functioncall130 = null;

        spinachParser.scalarvardec_return scalarvardec131 = null;

        spinachParser.vectorvardec_return vectorvardec132 = null;

        spinachParser.matrixvardec_return matrixvardec133 = null;

        spinachParser.deletionofvar_return deletionofvar134 = null;

        spinachParser.print_return print135 = null;

        spinachParser.ifelse_return ifelse136 = null;

        spinachParser.functionreturn_return functionreturn137 = null;

        object VARTYPE107_tree=null;
        object char_literal109_tree=null;
        object char_literal110_tree=null;
        object char_literal111_tree=null;
        object char_literal112_tree=null;
        object char_literal122_tree=null;
        object string_literal123_tree=null;
        object char_literal125_tree=null;
        object char_literal126_tree=null;
        object char_literal127_tree=null;
        object char_literal128_tree=null;
        object char_literal138_tree=null;

        retval.ret = new FunctionElement();

        try
        {
            // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:227:1: ( ( VARTYPE variable '(' ( (e11= functiondeclaration ( ',' e12= functiondeclaration )* )? ) ')' '{' ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn )+ '}' ) | 'void' variable '(' ( (e11= functiondeclaration ( ',' e12= functiondeclaration )* )? ) ')' '{' ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn )+ '}' )
            int alt29 = 2;
            int LA29_0 = input.LA(1);

            if ( (LA29_0 == VARTYPE) )
            {
                alt29 = 1;
            }
            else if ( (LA29_0 == 39) )
            {
                alt29 = 2;
            }
            else
            {
                NoViableAltException nvae_d29s0 =
                    new NoViableAltException("", 29, 0, input);

                throw nvae_d29s0;
            }
            switch (alt29)
            {
                case 1 :
                    // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:227:3: ( VARTYPE variable '(' ( (e11= functiondeclaration ( ',' e12= functiondeclaration )* )? ) ')' '{' ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn )+ '}' )
                    {
                        root_0 = (object)adaptor.GetNilNode();

                        // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:227:3: ( VARTYPE variable '(' ( (e11= functiondeclaration ( ',' e12= functiondeclaration )* )? ) ')' '{' ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn )+ '}' )
                        // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:227:4: VARTYPE variable '(' ( (e11= functiondeclaration ( ',' e12= functiondeclaration )* )? ) ')' '{' ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn )+ '}'
                        {
                            VARTYPE107=(IToken)Match(input,VARTYPE,FOLLOW_VARTYPE_in_functiondefination1215);
                                VARTYPE107_tree = (object)adaptor.Create(VARTYPE107);
                                adaptor.AddChild(root_0, VARTYPE107_tree);

                            retval.ret.setreturntype(((VARTYPE107 != null) ? VARTYPE107.Text : null));
                            PushFollow(FOLLOW_variable_in_functiondefination1220);
                            variable108 = variable();
                            state.followingStackPointer--;

                            adaptor.AddChild(root_0, variable108.Tree);
                            retval.ret.setfunctionname(((variable108 != null) ? variable108.ret : null));
                            char_literal109=(IToken)Match(input,LEFTBRACE,FOLLOW_LEFTBRACE_in_functiondefination1226);
                                char_literal109_tree = (object)adaptor.Create(char_literal109);
                                adaptor.AddChild(root_0, char_literal109_tree);

                            // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:230:2: ( (e11= functiondeclaration ( ',' e12= functiondeclaration )* )? )
                            // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:230:3: (e11= functiondeclaration ( ',' e12= functiondeclaration )* )?
                            {
                                // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:230:3: (e11= functiondeclaration ( ',' e12= functiondeclaration )* )?
                                int alt24 = 2;
                                int LA24_0 = input.LA(1);

                                if ( (LA24_0 == VARTYPE) )
                                {
                                    alt24 = 1;
                                }
                                switch (alt24)
                                {
                                    case 1 :
                                        // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:230:4: e11= functiondeclaration ( ',' e12= functiondeclaration )*
                                        {
                                            PushFollow(FOLLOW_functiondeclaration_in_functiondefination1234);
                                            e11 = functiondeclaration();
                                            state.followingStackPointer--;

                                            adaptor.AddChild(root_0, e11.Tree);
                                            retval.ret.setArguments(((e11 != null) ? e11.ret : null));
                                            // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:230:64: ( ',' e12= functiondeclaration )*
                                            do
                                            {
                                                int alt23 = 2;
                                                int LA23_0 = input.LA(1);

                                                if ( (LA23_0 == 28) )
                                                {
                                                    alt23 = 1;
                                                }

                                                switch (alt23)
                                                {
                                                    case 1 :
                                                        // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:230:65: ',' e12= functiondeclaration
                                                        {
                                                            char_literal110=(IToken)Match(input,28,FOLLOW_28_in_functiondefination1237);
                                                                char_literal110_tree = (object)adaptor.Create(char_literal110);
                                                                adaptor.AddChild(root_0, char_literal110_tree);

                                                            PushFollow(FOLLOW_functiondeclaration_in_functiondefination1242);
                                                            e12 = functiondeclaration();
                                                            state.followingStackPointer--;

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

                                                        }
                                                        break;

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

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

                                        }
                                        break;

                                }

                            }

                            char_literal111=(IToken)Match(input,RIGHTBRACE,FOLLOW_RIGHTBRACE_in_functiondefination1251);
                                char_literal111_tree = (object)adaptor.Create(char_literal111);
                                adaptor.AddChild(root_0, char_literal111_tree);

                            char_literal112=(IToken)Match(input,LEFTPARANTHESIS,FOLLOW_LEFTPARANTHESIS_in_functiondefination1253);
                                char_literal112_tree = (object)adaptor.Create(char_literal112);
                                adaptor.AddChild(root_0, char_literal112_tree);

                            // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:232:5: ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn )+
                            int cnt25 = 0;
                            do
                            {
                                int alt25 = 10;
                                alt25 = dfa25.Predict(input);
                                switch (alt25)
                                {
                                    case 1 :
                                        // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:232:6: assignment
                                        {
                                            PushFollow(FOLLOW_assignment_in_functiondefination1256);
                                            assignment113 = assignment();
                                            state.followingStackPointer--;

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

                                        }
                                        break;
                                    case 2 :
                                        // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:232:55: functioncall
                                        {
                                            PushFollow(FOLLOW_functioncall_in_functiondefination1259);
                                            functioncall114 = functioncall();
                                            state.followingStackPointer--;

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

                                        }
                                        break;
                                    case 3 :
                                        // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:232:109: scalarvardec
                                        {
                                            PushFollow(FOLLOW_scalarvardec_in_functiondefination1263);
                                            scalarvardec115 = scalarvardec();
                                            state.followingStackPointer--;

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

                                        }
                                        break;
                                    case 4 :
                                        // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:233:5: vectorvardec
                                        {
                                            PushFollow(FOLLOW_vectorvardec_in_functiondefination1271);
                                            vectorvardec116 = vectorvardec();
                                            state.followingStackPointer--;

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

                                        }
                                        break;
                                    case 5 :
                                        // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:234:5: matrixvardec
                                        {
                                            PushFollow(FOLLOW_matrixvardec_in_functiondefination1279);
                                            matrixvardec117 = matrixvardec();
                                            state.followingStackPointer--;

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

                                        }
                                        break;
                                    case 6 :
                                        // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:235:5: deletionofvar
                                        {
                                            PushFollow(FOLLOW_deletionofvar_in_functiondefination1287);
                                            deletionofvar118 = deletionofvar();
                                            state.followingStackPointer--;

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

                                        }
                                        break;
                                    case 7 :
                                        // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:235:64: print
                                        {
                                            PushFollow(FOLLOW_print_in_functiondefination1293);
                                            print119 = print();
                                            state.followingStackPointer--;

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

                                        }
                                        break;
                                    case 8 :
                                        // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:236:5: ifelse
                                        {
                                            PushFollow(FOLLOW_ifelse_in_functiondefination1301);
                                            ifelse120 = ifelse();
                                            state.followingStackPointer--;

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

                                        }
                                        break;
                                    case 9 :
                                        // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:236:47: functionreturn
                                        {
                                            PushFollow(FOLLOW_functionreturn_in_functiondefination1305);
                                            functionreturn121 = functionreturn();
                                            state.followingStackPointer--;

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

                                        }
                                        break;

                                    default:
                                        if ( cnt25 >= 1 ) goto loop25;
                                            EarlyExitException eee25 =
                                                new EarlyExitException(25, input);
                                            throw eee25;
                                }
                                cnt25++;
                            } while (true);

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

                            char_literal122=(IToken)Match(input,RIGHTPARANTHESIS,FOLLOW_RIGHTPARANTHESIS_in_functiondefination1310);
                                char_literal122_tree = (object)adaptor.Create(char_literal122);
                                adaptor.AddChild(root_0, char_literal122_tree);

                        }

                    }
                    break;
                case 2 :
                    // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:237:6: 'void' variable '(' ( (e11= functiondeclaration ( ',' e12= functiondeclaration )* )? ) ')' '{' ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn )+ '}'
                    {
                        root_0 = (object)adaptor.GetNilNode();

                        string_literal123=(IToken)Match(input,39,FOLLOW_39_in_functiondefination1313);
                            string_literal123_tree = (object)adaptor.Create(string_literal123);
                            adaptor.AddChild(root_0, string_literal123_tree);

                        retval.ret.setreturntype("void");
                        PushFollow(FOLLOW_variable_in_functiondefination1318);
                        variable124 = variable();
                        state.followingStackPointer--;

                        adaptor.AddChild(root_0, variable124.Tree);
                        retval.ret.setfunctionname(((variable124 != null) ? variable124.ret : null));
                        char_literal125=(IToken)Match(input,LEFTBRACE,FOLLOW_LEFTBRACE_in_functiondefination1324);
                            char_literal125_tree = (object)adaptor.Create(char_literal125);
                            adaptor.AddChild(root_0, char_literal125_tree);

                        // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:240:2: ( (e11= functiondeclaration ( ',' e12= functiondeclaration )* )? )
                        // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:240:3: (e11= functiondeclaration ( ',' e12= functiondeclaration )* )?
                        {
                            // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:240:3: (e11= functiondeclaration ( ',' e12= functiondeclaration )* )?
                            int alt27 = 2;
                            int LA27_0 = input.LA(1);

                            if ( (LA27_0 == VARTYPE) )
                            {
                                alt27 = 1;
                            }
                            switch (alt27)
                            {
                                case 1 :
                                    // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:240:4: e11= functiondeclaration ( ',' e12= functiondeclaration )*
                                    {
                                        PushFollow(FOLLOW_functiondeclaration_in_functiondefination1333);
                                        e11 = functiondeclaration();
                                        state.followingStackPointer--;

                                        adaptor.AddChild(root_0, e11.Tree);
                                        retval.ret.setArguments(((e11 != null) ? e11.ret : null));
                                        // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:240:65: ( ',' e12= functiondeclaration )*
                                        do
                                        {
                                            int alt26 = 2;
                                            int LA26_0 = input.LA(1);

                                            if ( (LA26_0 == 28) )
                                            {
                                                alt26 = 1;
                                            }

                                            switch (alt26)
                                            {
                                                case 1 :
                                                    // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:240:66: ',' e12= functiondeclaration
                                                    {
                                                        char_literal126=(IToken)Match(input,28,FOLLOW_28_in_functiondefination1336);
                                                            char_literal126_tree = (object)adaptor.Create(char_literal126);
                                                            adaptor.AddChild(root_0, char_literal126_tree);

                                                        PushFollow(FOLLOW_functiondeclaration_in_functiondefination1340);
                                                        e12 = functiondeclaration();
                                                        state.followingStackPointer--;

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

                                                    }
                                                    break;

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

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

                                    }
                                    break;

                            }

                        }

                        char_literal127=(IToken)Match(input,RIGHTBRACE,FOLLOW_RIGHTBRACE_in_functiondefination1349);
                            char_literal127_tree = (object)adaptor.Create(char_literal127);
                            adaptor.AddChild(root_0, char_literal127_tree);

                        char_literal128=(IToken)Match(input,LEFTPARANTHESIS,FOLLOW_LEFTPARANTHESIS_in_functiondefination1351);
                            char_literal128_tree = (object)adaptor.Create(char_literal128);
                            adaptor.AddChild(root_0, char_literal128_tree);

                        // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:242:5: ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn )+
                        int cnt28 = 0;
                        do
                        {
                            int alt28 = 10;
                            alt28 = dfa28.Predict(input);
                            switch (alt28)
                            {
                                case 1 :
                                    // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:242:6: assignment
                                    {
                                        PushFollow(FOLLOW_assignment_in_functiondefination1354);
                                        assignment129 = assignment();
                                        state.followingStackPointer--;

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

                                    }
                                    break;
                                case 2 :
                                    // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:242:55: functioncall
                                    {
                                        PushFollow(FOLLOW_functioncall_in_functiondefination1357);
                                        functioncall130 = functioncall();
                                        state.followingStackPointer--;

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

                                    }
                                    break;
                                case 3 :
                                    // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:242:109: scalarvardec
                                    {
                                        PushFollow(FOLLOW_scalarvardec_in_functiondefination1361);
                                        scalarvardec131 = scalarvardec();
                                        state.followingStackPointer--;

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

                                    }
                                    break;
                                case 4 :
                                    // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:243:5: vectorvardec
                                    {
                                        PushFollow(FOLLOW_vectorvardec_in_functiondefination1369);
                                        vectorvardec132 = vectorvardec();
                                        state.followingStackPointer--;

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

                                    }
                                    break;
                                case 5 :
                                    // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:244:5: matrixvardec
                                    {
                                        PushFollow(FOLLOW_matrixvardec_in_functiondefination1377);
                                        matrixvardec133 = matrixvardec();
                                        state.followingStackPointer--;

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

                                    }
                                    break;
                                case 6 :
                                    // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:245:5: deletionofvar
                                    {
                                        PushFollow(FOLLOW_deletionofvar_in_functiondefination1385);
                                        deletionofvar134 = deletionofvar();
                                        state.followingStackPointer--;

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

                                    }
                                    break;
                                case 7 :
                                    // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:245:64: print
                                    {
                                        PushFollow(FOLLOW_print_in_functiondefination1391);
                                        print135 = print();
                                        state.followingStackPointer--;

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

                                    }
                                    break;
                                case 8 :
                                    // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:246:5: ifelse
                                    {
                                        PushFollow(FOLLOW_ifelse_in_functiondefination1399);
                                        ifelse136 = ifelse();
                                        state.followingStackPointer--;

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

                                    }
                                    break;
                                case 9 :
                                    // C:\\Users\\Jegan\\Documents\\MSCE\\FALL 09\\SoftwareStudio\\SPINACH-Srinivasan\\ConsoleApplication1\\ConsoleApplication1\\spinach.g:246:47: functionreturn
                                    {
                                        PushFollow(FOLLOW_functionreturn_in_functiondefination1403);
                                        functionreturn137 = functionreturn();
                                        state.followingStackPointer--;

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

                                    }
                                    break;

                                default:
                                    if ( cnt28 >= 1 ) goto loop28;
                                        EarlyExitException eee28 =
                                            new EarlyExitException(28, input);
                                        throw eee28;
                            }
                            cnt28++;
                        } while (true);

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

                        char_literal138=(IToken)Match(input,RIGHTPARANTHESIS,FOLLOW_RIGHTPARANTHESIS_in_functiondefination1408);
                            char_literal138_tree = (object)adaptor.Create(char_literal138);
                            adaptor.AddChild(root_0, char_literal138_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;
    }
Пример #5
0
    // $ANTLR start "functiondefination"
    // spinach.g:287:1: functiondefination returns [FunctionElement ret] : ( ( VARTYPE variable '(' ( (e11= arguments ( ',' e12= arguments )* )? ) ')' '{' ( ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement | comment )+ )? '}' ) | 'void' variable '(' ( (e11= arguments ( ',' e12= arguments )* )? ) ')' '{' ( ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | comment | parallelfor | forstatement )+ )? '}' );
    public spinachParser.functiondefination_return functiondefination() // throws RecognitionException [1]
    {   
        spinachParser.functiondefination_return retval = new spinachParser.functiondefination_return();
        retval.Start = input.LT(1);

        object root_0 = null;

        IToken VARTYPE137 = null;
        IToken char_literal139 = null;
        IToken char_literal140 = null;
        IToken char_literal141 = null;
        IToken char_literal142 = null;
        IToken char_literal155 = null;
        IToken string_literal156 = null;
        IToken char_literal158 = null;
        IToken char_literal159 = null;
        IToken char_literal160 = null;
        IToken char_literal161 = null;
        IToken char_literal174 = null;
        spinachParser.arguments_return e11 = null;

        spinachParser.arguments_return e12 = null;

        spinachParser.variable_return variable138 = null;

        spinachParser.assignment_return assignment143 = null;

        spinachParser.functioncall_return functioncall144 = null;

        spinachParser.scalarvardec_return scalarvardec145 = null;

        spinachParser.vectorvardec_return vectorvardec146 = null;

        spinachParser.matrixvardec_return matrixvardec147 = null;

        spinachParser.deletionofvar_return deletionofvar148 = null;

        spinachParser.print_return print149 = null;

        spinachParser.ifelse_return ifelse150 = null;

        spinachParser.functionreturn_return functionreturn151 = null;

        spinachParser.parallelfor_return parallelfor152 = null;

        spinachParser.forstatement_return forstatement153 = null;

        spinachParser.comment_return comment154 = null;

        spinachParser.variable_return variable157 = null;

        spinachParser.assignment_return assignment162 = null;

        spinachParser.functioncall_return functioncall163 = null;

        spinachParser.scalarvardec_return scalarvardec164 = null;

        spinachParser.vectorvardec_return vectorvardec165 = null;

        spinachParser.matrixvardec_return matrixvardec166 = null;

        spinachParser.deletionofvar_return deletionofvar167 = null;

        spinachParser.print_return print168 = null;

        spinachParser.ifelse_return ifelse169 = null;

        spinachParser.functionreturn_return functionreturn170 = null;

        spinachParser.comment_return comment171 = null;

        spinachParser.parallelfor_return parallelfor172 = null;

        spinachParser.forstatement_return forstatement173 = null;


        object VARTYPE137_tree=null;
        object char_literal139_tree=null;
        object char_literal140_tree=null;
        object char_literal141_tree=null;
        object char_literal142_tree=null;
        object char_literal155_tree=null;
        object string_literal156_tree=null;
        object char_literal158_tree=null;
        object char_literal159_tree=null;
        object char_literal160_tree=null;
        object char_literal161_tree=null;
        object char_literal174_tree=null;


        retval.ret = new FunctionElement();

        try 
    	{
            // spinach.g:292:1: ( ( VARTYPE variable '(' ( (e11= arguments ( ',' e12= arguments )* )? ) ')' '{' ( ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement | comment )+ )? '}' ) | 'void' variable '(' ( (e11= arguments ( ',' e12= arguments )* )? ) ')' '{' ( ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | comment | parallelfor | forstatement )+ )? '}' )
            int alt49 = 2;
            int LA49_0 = input.LA(1);

            if ( (LA49_0 == VARTYPE) )
            {
                alt49 = 1;
            }
            else if ( (LA49_0 == 43) )
            {
                alt49 = 2;
            }
            else 
            {
                NoViableAltException nvae_d49s0 =
                    new NoViableAltException("", 49, 0, input);

                throw nvae_d49s0;
            }
            switch (alt49) 
            {
                case 1 :
                    // spinach.g:292:3: ( VARTYPE variable '(' ( (e11= arguments ( ',' e12= arguments )* )? ) ')' '{' ( ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement | comment )+ )? '}' )
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	// spinach.g:292:3: ( VARTYPE variable '(' ( (e11= arguments ( ',' e12= arguments )* )? ) ')' '{' ( ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement | comment )+ )? '}' )
                    	// spinach.g:292:4: VARTYPE variable '(' ( (e11= arguments ( ',' e12= arguments )* )? ) ')' '{' ( ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement | comment )+ )? '}'
                    	{
                    		VARTYPE137=(IToken)Match(input,VARTYPE,FOLLOW_VARTYPE_in_functiondefination1705); 
                    			VARTYPE137_tree = (object)adaptor.Create(VARTYPE137);
                    			adaptor.AddChild(root_0, VARTYPE137_tree);

                    		retval.ret.setreturntype(((VARTYPE137 != null) ? VARTYPE137.Text : null));
                    		PushFollow(FOLLOW_variable_in_functiondefination1710);
                    		variable138 = variable();
                    		state.followingStackPointer--;

                    		adaptor.AddChild(root_0, variable138.Tree);
                    		retval.ret.setfunctionname(((variable138 != null) ? variable138.ret : null));
                    		char_literal139=(IToken)Match(input,LEFTBRACE,FOLLOW_LEFTBRACE_in_functiondefination1716); 
                    			char_literal139_tree = (object)adaptor.Create(char_literal139);
                    			adaptor.AddChild(root_0, char_literal139_tree);

                    		// spinach.g:295:2: ( (e11= arguments ( ',' e12= arguments )* )? )
                    		// spinach.g:295:3: (e11= arguments ( ',' e12= arguments )* )?
                    		{
                    			// spinach.g:295:3: (e11= arguments ( ',' e12= arguments )* )?
                    			int alt42 = 2;
                    			int LA42_0 = input.LA(1);

                    			if ( (LA42_0 == VARTYPE || LA42_0 == 28 || LA42_0 == 32) )
                    			{
                    			    alt42 = 1;
                    			}
                    			switch (alt42) 
                    			{
                    			    case 1 :
                    			        // spinach.g:295:4: e11= arguments ( ',' e12= arguments )*
                    			        {
                    			        	PushFollow(FOLLOW_arguments_in_functiondefination1724);
                    			        	e11 = arguments();
                    			        	state.followingStackPointer--;

                    			        	adaptor.AddChild(root_0, e11.Tree);
                    			        	retval.ret.setArguments(((e11 != null) ? e11.ret : null));
                    			        	// spinach.g:295:54: ( ',' e12= arguments )*
                    			        	do 
                    			        	{
                    			        	    int alt41 = 2;
                    			        	    int LA41_0 = input.LA(1);

                    			        	    if ( (LA41_0 == 31) )
                    			        	    {
                    			        	        alt41 = 1;
                    			        	    }


                    			        	    switch (alt41) 
                    			        		{
                    			        			case 1 :
                    			        			    // spinach.g:295:55: ',' e12= arguments
                    			        			    {
                    			        			    	char_literal140=(IToken)Match(input,31,FOLLOW_31_in_functiondefination1727); 
                    			        			    		char_literal140_tree = (object)adaptor.Create(char_literal140);
                    			        			    		adaptor.AddChild(root_0, char_literal140_tree);

                    			        			    	PushFollow(FOLLOW_arguments_in_functiondefination1732);
                    			        			    	e12 = arguments();
                    			        			    	state.followingStackPointer--;

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

                    			        			    }
                    			        			    break;

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

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


                    			        }
                    			        break;

                    			}


                    		}

                    		char_literal141=(IToken)Match(input,RIGHTBRACE,FOLLOW_RIGHTBRACE_in_functiondefination1741); 
                    			char_literal141_tree = (object)adaptor.Create(char_literal141);
                    			adaptor.AddChild(root_0, char_literal141_tree);

                    		char_literal142=(IToken)Match(input,LEFTPARANTHESIS,FOLLOW_LEFTPARANTHESIS_in_functiondefination1743); 
                    			char_literal142_tree = (object)adaptor.Create(char_literal142);
                    			adaptor.AddChild(root_0, char_literal142_tree);

                    		// spinach.g:297:5: ( ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement | comment )+ )?
                    		int alt44 = 2;
                    		int LA44_0 = input.LA(1);

                    		if ( (LA44_0 == VARIABLE || LA44_0 == VARTYPE || LA44_0 == STRINGTYPE || LA44_0 == 28 || LA44_0 == 32 || (LA44_0 >= 35 && LA44_0 <= 37) || LA44_0 == 40 || LA44_0 == 42 || LA44_0 == 46 || LA44_0 == 56) )
                    		{
                    		    alt44 = 1;
                    		}
                    		switch (alt44) 
                    		{
                    		    case 1 :
                    		        // spinach.g:297:6: ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement | comment )+
                    		        {
                    		        	// spinach.g:297:6: ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | parallelfor | forstatement | comment )+
                    		        	int cnt43 = 0;
                    		        	do 
                    		        	{
                    		        	    int alt43 = 13;
                    		        	    alt43 = dfa43.Predict(input);
                    		        	    switch (alt43) 
                    		        		{
                    		        			case 1 :
                    		        			    // spinach.g:297:7: assignment
                    		        			    {
                    		        			    	PushFollow(FOLLOW_assignment_in_functiondefination1747);
                    		        			    	assignment143 = assignment();
                    		        			    	state.followingStackPointer--;

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

                    		        			    }
                    		        			    break;
                    		        			case 2 :
                    		        			    // spinach.g:297:56: functioncall
                    		        			    {
                    		        			    	PushFollow(FOLLOW_functioncall_in_functiondefination1750);
                    		        			    	functioncall144 = functioncall();
                    		        			    	state.followingStackPointer--;

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

                    		        			    }
                    		        			    break;
                    		        			case 3 :
                    		        			    // spinach.g:297:110: scalarvardec
                    		        			    {
                    		        			    	PushFollow(FOLLOW_scalarvardec_in_functiondefination1754);
                    		        			    	scalarvardec145 = scalarvardec();
                    		        			    	state.followingStackPointer--;

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

                    		        			    }
                    		        			    break;
                    		        			case 4 :
                    		        			    // spinach.g:298:5: vectorvardec
                    		        			    {
                    		        			    	PushFollow(FOLLOW_vectorvardec_in_functiondefination1762);
                    		        			    	vectorvardec146 = vectorvardec();
                    		        			    	state.followingStackPointer--;

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

                    		        			    }
                    		        			    break;
                    		        			case 5 :
                    		        			    // spinach.g:299:5: matrixvardec
                    		        			    {
                    		        			    	PushFollow(FOLLOW_matrixvardec_in_functiondefination1770);
                    		        			    	matrixvardec147 = matrixvardec();
                    		        			    	state.followingStackPointer--;

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

                    		        			    }
                    		        			    break;
                    		        			case 6 :
                    		        			    // spinach.g:300:5: deletionofvar
                    		        			    {
                    		        			    	PushFollow(FOLLOW_deletionofvar_in_functiondefination1778);
                    		        			    	deletionofvar148 = deletionofvar();
                    		        			    	state.followingStackPointer--;

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

                    		        			    }
                    		        			    break;
                    		        			case 7 :
                    		        			    // spinach.g:300:64: print
                    		        			    {
                    		        			    	PushFollow(FOLLOW_print_in_functiondefination1784);
                    		        			    	print149 = print();
                    		        			    	state.followingStackPointer--;

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

                    		        			    }
                    		        			    break;
                    		        			case 8 :
                    		        			    // spinach.g:301:5: ifelse
                    		        			    {
                    		        			    	PushFollow(FOLLOW_ifelse_in_functiondefination1792);
                    		        			    	ifelse150 = ifelse();
                    		        			    	state.followingStackPointer--;

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

                    		        			    }
                    		        			    break;
                    		        			case 9 :
                    		        			    // spinach.g:301:47: functionreturn
                    		        			    {
                    		        			    	PushFollow(FOLLOW_functionreturn_in_functiondefination1796);
                    		        			    	functionreturn151 = functionreturn();
                    		        			    	state.followingStackPointer--;

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

                    		        			    }
                    		        			    break;
                    		        			case 10 :
                    		        			    // spinach.g:301:105: parallelfor
                    		        			    {
                    		        			    	PushFollow(FOLLOW_parallelfor_in_functiondefination1800);
                    		        			    	parallelfor152 = parallelfor();
                    		        			    	state.followingStackPointer--;

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

                    		        			    }
                    		        			    break;
                    		        			case 11 :
                    		        			    // spinach.g:301:157: forstatement
                    		        			    {
                    		        			    	PushFollow(FOLLOW_forstatement_in_functiondefination1804);
                    		        			    	forstatement153 = forstatement();
                    		        			    	state.followingStackPointer--;

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

                    		        			    }
                    		        			    break;
                    		        			case 12 :
                    		        			    // spinach.g:301:210: comment
                    		        			    {
                    		        			    	PushFollow(FOLLOW_comment_in_functiondefination1807);
                    		        			    	comment154 = comment();
                    		        			    	state.followingStackPointer--;

                    		        			    	adaptor.AddChild(root_0, comment154.Tree);

                    		        			    }
                    		        			    break;

                    		        			default:
                    		        			    if ( cnt43 >= 1 ) goto loop43;
                    		        		            EarlyExitException eee43 =
                    		        		                new EarlyExitException(43, input);
                    		        		            throw eee43;
                    		        	    }
                    		        	    cnt43++;
                    		        	} while (true);

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


                    		        }
                    		        break;

                    		}

                    		char_literal155=(IToken)Match(input,RIGHTPARANTHESIS,FOLLOW_RIGHTPARANTHESIS_in_functiondefination1813); 
                    			char_literal155_tree = (object)adaptor.Create(char_literal155);
                    			adaptor.AddChild(root_0, char_literal155_tree);


                    	}


                    }
                    break;
                case 2 :
                    // spinach.g:302:6: 'void' variable '(' ( (e11= arguments ( ',' e12= arguments )* )? ) ')' '{' ( ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | comment | parallelfor | forstatement )+ )? '}'
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	string_literal156=(IToken)Match(input,43,FOLLOW_43_in_functiondefination1816); 
                    		string_literal156_tree = (object)adaptor.Create(string_literal156);
                    		adaptor.AddChild(root_0, string_literal156_tree);

                    	retval.ret.setreturntype("void");
                    	PushFollow(FOLLOW_variable_in_functiondefination1821);
                    	variable157 = variable();
                    	state.followingStackPointer--;

                    	adaptor.AddChild(root_0, variable157.Tree);
                    	retval.ret.setfunctionname(((variable157 != null) ? variable157.ret : null));
                    	char_literal158=(IToken)Match(input,LEFTBRACE,FOLLOW_LEFTBRACE_in_functiondefination1827); 
                    		char_literal158_tree = (object)adaptor.Create(char_literal158);
                    		adaptor.AddChild(root_0, char_literal158_tree);

                    	// spinach.g:305:2: ( (e11= arguments ( ',' e12= arguments )* )? )
                    	// spinach.g:305:3: (e11= arguments ( ',' e12= arguments )* )?
                    	{
                    		// spinach.g:305:3: (e11= arguments ( ',' e12= arguments )* )?
                    		int alt46 = 2;
                    		int LA46_0 = input.LA(1);

                    		if ( (LA46_0 == VARTYPE || LA46_0 == 28 || LA46_0 == 32) )
                    		{
                    		    alt46 = 1;
                    		}
                    		switch (alt46) 
                    		{
                    		    case 1 :
                    		        // spinach.g:305:4: e11= arguments ( ',' e12= arguments )*
                    		        {
                    		        	PushFollow(FOLLOW_arguments_in_functiondefination1836);
                    		        	e11 = arguments();
                    		        	state.followingStackPointer--;

                    		        	adaptor.AddChild(root_0, e11.Tree);
                    		        	retval.ret.setArguments(((e11 != null) ? e11.ret : null));
                    		        	// spinach.g:305:55: ( ',' e12= arguments )*
                    		        	do 
                    		        	{
                    		        	    int alt45 = 2;
                    		        	    int LA45_0 = input.LA(1);

                    		        	    if ( (LA45_0 == 31) )
                    		        	    {
                    		        	        alt45 = 1;
                    		        	    }


                    		        	    switch (alt45) 
                    		        		{
                    		        			case 1 :
                    		        			    // spinach.g:305:56: ',' e12= arguments
                    		        			    {
                    		        			    	char_literal159=(IToken)Match(input,31,FOLLOW_31_in_functiondefination1839); 
                    		        			    		char_literal159_tree = (object)adaptor.Create(char_literal159);
                    		        			    		adaptor.AddChild(root_0, char_literal159_tree);

                    		        			    	PushFollow(FOLLOW_arguments_in_functiondefination1843);
                    		        			    	e12 = arguments();
                    		        			    	state.followingStackPointer--;

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

                    		        			    }
                    		        			    break;

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

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


                    		        }
                    		        break;

                    		}


                    	}

                    	char_literal160=(IToken)Match(input,RIGHTBRACE,FOLLOW_RIGHTBRACE_in_functiondefination1852); 
                    		char_literal160_tree = (object)adaptor.Create(char_literal160);
                    		adaptor.AddChild(root_0, char_literal160_tree);

                    	char_literal161=(IToken)Match(input,LEFTPARANTHESIS,FOLLOW_LEFTPARANTHESIS_in_functiondefination1854); 
                    		char_literal161_tree = (object)adaptor.Create(char_literal161);
                    		adaptor.AddChild(root_0, char_literal161_tree);

                    	// spinach.g:307:5: ( ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | comment | parallelfor | forstatement )+ )?
                    	int alt48 = 2;
                    	int LA48_0 = input.LA(1);

                    	if ( (LA48_0 == VARIABLE || LA48_0 == VARTYPE || LA48_0 == STRINGTYPE || LA48_0 == 28 || LA48_0 == 32 || (LA48_0 >= 35 && LA48_0 <= 37) || LA48_0 == 40 || LA48_0 == 42 || LA48_0 == 46 || LA48_0 == 56) )
                    	{
                    	    alt48 = 1;
                    	}
                    	switch (alt48) 
                    	{
                    	    case 1 :
                    	        // spinach.g:307:6: ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | comment | parallelfor | forstatement )+
                    	        {
                    	        	// spinach.g:307:6: ( assignment | functioncall | scalarvardec | vectorvardec | matrixvardec | deletionofvar | print | ifelse | functionreturn | comment | parallelfor | forstatement )+
                    	        	int cnt47 = 0;
                    	        	do 
                    	        	{
                    	        	    int alt47 = 13;
                    	        	    alt47 = dfa47.Predict(input);
                    	        	    switch (alt47) 
                    	        		{
                    	        			case 1 :
                    	        			    // spinach.g:307:7: assignment
                    	        			    {
                    	        			    	PushFollow(FOLLOW_assignment_in_functiondefination1858);
                    	        			    	assignment162 = assignment();
                    	        			    	state.followingStackPointer--;

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

                    	        			    }
                    	        			    break;
                    	        			case 2 :
                    	        			    // spinach.g:307:56: functioncall
                    	        			    {
                    	        			    	PushFollow(FOLLOW_functioncall_in_functiondefination1861);
                    	        			    	functioncall163 = functioncall();
                    	        			    	state.followingStackPointer--;

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

                    	        			    }
                    	        			    break;
                    	        			case 3 :
                    	        			    // spinach.g:307:110: scalarvardec
                    	        			    {
                    	        			    	PushFollow(FOLLOW_scalarvardec_in_functiondefination1865);
                    	        			    	scalarvardec164 = scalarvardec();
                    	        			    	state.followingStackPointer--;

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

                    	        			    }
                    	        			    break;
                    	        			case 4 :
                    	        			    // spinach.g:308:5: vectorvardec
                    	        			    {
                    	        			    	PushFollow(FOLLOW_vectorvardec_in_functiondefination1873);
                    	        			    	vectorvardec165 = vectorvardec();
                    	        			    	state.followingStackPointer--;

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

                    	        			    }
                    	        			    break;
                    	        			case 5 :
                    	        			    // spinach.g:309:5: matrixvardec
                    	        			    {
                    	        			    	PushFollow(FOLLOW_matrixvardec_in_functiondefination1881);
                    	        			    	matrixvardec166 = matrixvardec();
                    	        			    	state.followingStackPointer--;

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

                    	        			    }
                    	        			    break;
                    	        			case 6 :
                    	        			    // spinach.g:310:5: deletionofvar
                    	        			    {
                    	        			    	PushFollow(FOLLOW_deletionofvar_in_functiondefination1889);
                    	        			    	deletionofvar167 = deletionofvar();
                    	        			    	state.followingStackPointer--;

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

                    	        			    }
                    	        			    break;
                    	        			case 7 :
                    	        			    // spinach.g:310:64: print
                    	        			    {
                    	        			    	PushFollow(FOLLOW_print_in_functiondefination1895);
                    	        			    	print168 = print();
                    	        			    	state.followingStackPointer--;

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

                    	        			    }
                    	        			    break;
                    	        			case 8 :
                    	        			    // spinach.g:311:5: ifelse
                    	        			    {
                    	        			    	PushFollow(FOLLOW_ifelse_in_functiondefination1903);
                    	        			    	ifelse169 = ifelse();
                    	        			    	state.followingStackPointer--;

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

                    	        			    }
                    	        			    break;
                    	        			case 9 :
                    	        			    // spinach.g:311:47: functionreturn
                    	        			    {
                    	        			    	PushFollow(FOLLOW_functionreturn_in_functiondefination1907);
                    	        			    	functionreturn170 = functionreturn();
                    	        			    	state.followingStackPointer--;

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

                    	        			    }
                    	        			    break;
                    	        			case 10 :
                    	        			    // spinach.g:311:104: comment
                    	        			    {
                    	        			    	PushFollow(FOLLOW_comment_in_functiondefination1910);
                    	        			    	comment171 = comment();
                    	        			    	state.followingStackPointer--;

                    	        			    	adaptor.AddChild(root_0, comment171.Tree);

                    	        			    }
                    	        			    break;
                    	        			case 11 :
                    	        			    // spinach.g:311:113: parallelfor
                    	        			    {
                    	        			    	PushFollow(FOLLOW_parallelfor_in_functiondefination1913);
                    	        			    	parallelfor172 = parallelfor();
                    	        			    	state.followingStackPointer--;

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

                    	        			    }
                    	        			    break;
                    	        			case 12 :
                    	        			    // spinach.g:311:165: forstatement
                    	        			    {
                    	        			    	PushFollow(FOLLOW_forstatement_in_functiondefination1917);
                    	        			    	forstatement173 = forstatement();
                    	        			    	state.followingStackPointer--;

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

                    	        			    }
                    	        			    break;

                    	        			default:
                    	        			    if ( cnt47 >= 1 ) goto loop47;
                    	        		            EarlyExitException eee47 =
                    	        		                new EarlyExitException(47, input);
                    	        		            throw eee47;
                    	        	    }
                    	        	    cnt47++;
                    	        	} while (true);

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


                    	        }
                    	        break;

                    	}

                    	char_literal174=(IToken)Match(input,RIGHTPARANTHESIS,FOLLOW_RIGHTPARANTHESIS_in_functiondefination1924); 
                    		char_literal174_tree = (object)adaptor.Create(char_literal174);
                    		adaptor.AddChild(root_0, char_literal174_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;
    }