I need to read a .mif file created by IP Core Gen in xilinx
You're process was missing a begin.

    process 
        type my_file is file of integer; 
        file data_in : my_file; 
        variable fstatus : file_open_status; 
    begin
        file_open(fstatus, data_in, "c:\temp2.mif", READ_MODE);
    end process;


The unexpected identifier appears to be read, where READ_MODE was expected.

You don't have to connect the file_open_status output for procedure file_open, but if you don't why did you declare it?

The form of the implicitly declared procedure file_open (see IEEE Std 1076-2008, 5.5.2 File operations):

    type FT is file of TM;



  where type mark TM denotes a scalar type, a record type, or a fully constrained array subtype, the following
  operations are implicitly declared immediately following the file type declaration:
  ...  


procedure FILE_OPEN (Status: out FILE_OPEN_STATUS; 
                     file F: FT;  
                     External_Name: in STRING;
                     Open_Kind: in FILE_OPEN_KIND := READ_MODE);


Note this process as is doesn't do anything interesting.  Without a sensitivity list or an explicit wait statement it would try to open the file for read over and over again in an endless loop.

Modifying the process will at least allow the code to analyze. It still needs further work.

For the code you are displaying two of the use clauses are not needed:

-- use ieee.std_logic_arith.all;
-- use ieee.std_logic_unsigned.all;