Introduction to the theory, design, and implementation of programming languages, formal semantics of programming languages (operational, axiomatic, denotation, and  translational)