The symbol table is used throughout the compiler to store information about program entities like classes, instances, methods and variables. It has two main components - a name table to uniquely identify names, and an entity table with an entry for each program entity. The main symbol table operations are insert to add a new name, and lookup to find a name. Other functions initialize and finalize scopes when entering or exiting blocks. The symbol table incrementally collects information and transforms the entire program into a table that is used by various compiler phases.