4.7 Intermediate Code Generation and Code Optimization