COMPILER DESIGN PRACTICALS