The formal semantics of programming languages: an introduction | Synapse