Compiler Design: Analysis and Transformation