Theory of Computation and Compilers - Code Generation And Optimization