private Expr statement() throws IOException {

        if (lookAheadToken.tag == '(' || lookAheadToken.tag == Tag.NUM || lookAheadToken.tag == Tag.REAL) {
            expression();
            Expr t = e.gen();
            return t.reduce();
        } else if (lookAheadToken.tag == Tag.ID) {
            Token temp = lookAheadToken;
            match(Tag.ID);
            Word w = (Word) temp;
            if (lookAheadToken.tag == '=') {
                tempPostFixString += w.lexeme + " ";
                move();
                Id id = symbolTable.get(temp);
                if (id == null) {
                    error(w.lexeme + " not defined");
                }
                Stmt s = new Set(id, expression());
                tempPostFixString += "= ";
                return s.gen();
            } else {
                lookAheadToken = temp;
                expression();
                Expr t = e.gen();
                return t.reduce();
            }
        } else
            error("syntax error");
        return null;
    }