0) There's no "blockchain format" for the on-the-disk file.
1) blkNNNN.dat files are simple concatenation of the blocks as seen on the network wire.
2) because of the above and the possibility of Satoshi bitcoin client crashing mid-append, there is a possibility that those files contain partially-written blocks. There will be a header and at least portion of the transaction part written, but not all the way to the end.
3) blkindex.dat is just an index, nothing more. Currently it is in BerkeleyDB but there's a planned switch to LevelDB. None of this matters for your parser because the actual block chain will stay being stored in the above described simple format.
4) If you are trying to write your parser in C++ I suggest first looking into the parser written by the user znort987.
https://bitcointalk.org/index.php?topic=88584.0