Compiler design and implementation