Semantics will have an important role to play in the future development of software systems and domain specific languages, and there is a real need for an introductory book that presents the fundamental ideas behind these approaches; stresses their relationship by formulating and proving the relevant theorems; and illustrates the applications of semantics in computer science. This book investigates the relationship between the various methods and describes some of the main ideas used, illustrating these via interesting applications. Historically important application areas are used together with some exciting potential applications including: Validating prototype implementations of programming languages. Verifying program analyses that are part of more advanced implementations of programming languages. Verifying security analyses. Verifying useful program properties including information about execution time.