public final Node expr() throws RecognitionException {
        Node value = null;

        Node e = null;


        try {
            // C:\\Documents and Settings\\Administrator\\workspace_android4\\myosotis\\grammar\\Calc.g:25:1: (e= mulexpr ( '+' e= mulexpr | '-' e= mulexpr )* )
            // C:\\Documents and Settings\\Administrator\\workspace_android4\\myosotis\\grammar\\Calc.g:25:3: e= mulexpr ( '+' e= mulexpr | '-' e= mulexpr )*
            {
            pushFollow(FOLLOW_mulexpr_in_expr89);
            e=mulexpr();

            state._fsp--;

            value = e;
            // C:\\Documents and Settings\\Administrator\\workspace_android4\\myosotis\\grammar\\Calc.g:26:1: ( '+' e= mulexpr | '-' e= mulexpr )*
            loop3:
            do {
                int alt3=3;
                int LA3_0 = input.LA(1);

                if ( (LA3_0==17) ) {
                    alt3=1;
                }
                else if ( (LA3_0==18) ) {
                    alt3=2;
                }


                switch (alt3) {
            	case 1 :
            	    // C:\\Documents and Settings\\Administrator\\workspace_android4\\myosotis\\grammar\\Calc.g:26:3: '+' e= mulexpr
            	    {
            	    match(input,17,FOLLOW_17_in_expr95); 
            	    pushFollow(FOLLOW_mulexpr_in_expr99);
            	    e=mulexpr();

            	    state._fsp--;


            	    	Node temp = new Node(); 
            	    	temp.op = Node.OP_PLUS;
            	    	temp.left = value;
            	    	temp.right = e;
            	    	value = temp;


            	    }
            	    break;
            	case 2 :
            	    // C:\\Documents and Settings\\Administrator\\workspace_android4\\myosotis\\grammar\\Calc.g:34:3: '-' e= mulexpr
            	    {
            	    match(input,18,FOLLOW_18_in_expr106); 
            	    pushFollow(FOLLOW_mulexpr_in_expr110);
            	    e=mulexpr();

            	    state._fsp--;


            	    	Node temp = new Node(); 
            	    	temp.op = Node.OP_MINUS;
            	    	temp.left = value;
            	    	temp.right = e;
            	    	value = temp;


            	    }
            	    break;

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


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return value;
    }