Compiler design : analysis and transformation (2012)