Focusing on formal methods, this textbook covers the semantics of essential programming constructs and techniques for program analysis and verification. The authors introduce program graphs to represent control structures, aiming to strike a balance between generality and conceptual complexity, making the material accessible while providing a robust foundation for understanding program behavior and correctness.
Flemming Nielson Books




Two-Level Functional Languages
- 312 pages
- 11 hours of reading
The book introduces a novel framework that enhances the type notation used in functional programming languages by incorporating a specific notation to differentiate between run-time and compile-time behaviors. This extension aims to improve clarity and understanding of type systems, facilitating better programming practices and error detection in functional languages.
Principles of program analysis
- 473 pages
- 17 hours of reading
Program analysis concerns static techniques for computing reliable approximate information about the dynamic behaviour of programs. Applications include compilers (for code improvement), software validation (for detecting errors in algorithms or breaches of security) and transformations between data representation (for solving problems such as the Y2K problem). This book is unique in giving an overview of the four major approaches to program analysis: data flow analysis, constraint based analysis, abstract interpretation, and type and effect systems. The presentation demonstrates the extensive similarities between the approaches; this will aid the reader in choosing the right approach and in enhancing it with insights from the other approaches. The book covers basic semantic properties as well as more advanced algorithmic techniques. The book is aimed at M. Sc. and Ph. D. students but will be valuable also for experienced researchers and professionals.
Semantics with Applications: An Appetizer
- 274 pages
- 10 hours of reading
This book provides a rigorous introduction to the formal semantics of programming languages. Coverage includes 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.