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


        Object root_0 = null;

        Token MULT45=null;
        Token DIV46=null;
        LogoParser.atom_return o1 =null;

        LogoParser.atom_return o2 =null;


        Object MULT45_tree=null;
        Object DIV46_tree=null;

        try {
            // /home/carlos/Proyectos/logojava/Logo.g:123:2: (o1= atom ( MULT o2= atom | DIV o2= atom )* )
            // /home/carlos/Proyectos/logojava/Logo.g:123:4: o1= atom ( MULT o2= atom | DIV o2= atom )*
            {
            root_0 = (Object)adaptor.nil();


             ProductOperation operation = new ProductOperation();

            pushFollow(FOLLOW_atom_in_mult723);
            o1=atom();

            state._fsp--;

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

             operation.mult((o1!=null?o1.value:null));

            // /home/carlos/Proyectos/logojava/Logo.g:125:3: ( MULT o2= atom | DIV o2= atom )*
            loop16:
            do {
                int alt16=3;
                int LA16_0 = input.LA(1);

                if ( (LA16_0==MULT) ) {
                    alt16=1;
                }
                else if ( (LA16_0==DIV) ) {
                    alt16=2;
                }


                switch (alt16) {
            	case 1 :
            	    // /home/carlos/Proyectos/logojava/Logo.g:126:5: MULT o2= atom
            	    {
            	    MULT45=(Token)match(input,MULT,FOLLOW_MULT_in_mult738); 
            	    MULT45_tree = 
            	    (Object)adaptor.create(MULT45)
            	    ;
            	    adaptor.addChild(root_0, MULT45_tree);


            	    pushFollow(FOLLOW_atom_in_mult742);
            	    o2=atom();

            	    state._fsp--;

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

            	     operation.mult((o2!=null?o2.value:null));

            	    }
            	    break;
            	case 2 :
            	    // /home/carlos/Proyectos/logojava/Logo.g:127:5: DIV o2= atom
            	    {
            	    DIV46=(Token)match(input,DIV,FOLLOW_DIV_in_mult752); 
            	    DIV46_tree = 
            	    (Object)adaptor.create(DIV46)
            	    ;
            	    adaptor.addChild(root_0, DIV46_tree);


            	    pushFollow(FOLLOW_atom_in_mult756);
            	    o2=atom();

            	    state._fsp--;

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

            	     operation.div((o2!=null?o2.value:null));

            	    }
            	    break;

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


             retval.value = operation;

            }

            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;
    }