Programming Languages: Design and Implementation (4th Edition)