It depends on what you are trying to do.
The y.tab.c is a definition file that contains values for the terminal symbols used to interface with a scanner. This is automatically generated if you use flex to create the scanner.
Depending on the language of course. Flex scanners are not necessarily optimal for a given language (rather sucky for things like python which use white space to determine blocks - possible, but it gets tricky).
Bison+flex is the usual way to generate context free languages (LR(1)), and has some features that allow for the use of ambiguous grammar specifications.
The order of compilation is for flex to be run first (generating the y.tab.c file), then bison/yacc afterward.
This is normally handled by dependencies specified for make.
A very simple example of the combination of bison and flex is shown at http://en.wikipedia.org/wiki/GNU_bison
The details on flex are available at http://flex.sourceforge.net/manual/index.html#Top