Code-generation sequences often require the materialization of temporary storage. For example, a complex arithmetic expression may require temporaries to hold intermediate values. Hopefully, machine registers can accommodate such short-lived values. However, compilers must sometimes plan to spill values out of registers into temporary storage.
(a) Where are symbol table actions needed to allocate storage for temporaries?
(b) How can implicit scoping serve to limit the effective lifetime of temporaries?