public final LogoParser.assignment_return assignment() throws RecognitionException {
        LogoParser.assignment_return retval = new LogoParser.assignment_return();
        retval.start = input.LT(1);


        Object root_0 = null;

        Token MAKE30=null;
        Token ID31=null;
        LogoParser.expression_return expression32 =null;


        Object MAKE30_tree=null;
        Object ID31_tree=null;

        try {
            // /home/carlos/Proyectos/logojava/Logo.g:83:2: ( MAKE ID expression )
            // /home/carlos/Proyectos/logojava/Logo.g:83:4: MAKE ID expression
            {
            root_0 = (Object)adaptor.nil();


            MAKE30=(Token)match(input,MAKE,FOLLOW_MAKE_in_assignment398); 
            MAKE30_tree = 
            (Object)adaptor.create(MAKE30)
            ;
            adaptor.addChild(root_0, MAKE30_tree);


            ID31=(Token)match(input,ID,FOLLOW_ID_in_assignment400); 
            ID31_tree = 
            (Object)adaptor.create(ID31)
            ;
            adaptor.addChild(root_0, ID31_tree);


            pushFollow(FOLLOW_expression_in_assignment402);
            expression32=expression();

            state._fsp--;

            adaptor.addChild(root_0, expression32.getTree());

             retval.value = new Assignment((ID31!=null?ID31.getText():null),(expression32!=null?expression32.value:null));

            }

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


            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
        }
        return retval;
    }