An Application of Abstract Interpretation in Source Level Program Transformation