This well-written textbook focuses on a precise description of programming language semantics in a relatively easily understood manner, utilizing a notation derived from a subset of the Vienna development method (VDM). The author motivates the need for such semantic descriptions by noting that the time necessary to describe a high-level programming language feature is substantially less than the time necessary to write a compiler, and that the formalism also permits logical arguments about the language semantics to be made. The author does this in a practical manner by identifying some 60 common programming language issues (such as the dangling else problem), highlighting to the reader why they are a problem (and hence why natural language descriptions of programming language semantics are inadequate), and then how they can be clearly defined using the VDM-based notation and how logical arguments can be constructed based on the formal description.
The author developed both the formalism and textbook over an extended period, using ten years of classes to refine the content. The resultant book is easy to read, well organized, and appropriate for an upper-level undergraduate or graduate class. Most chapters end with a collection of projects or advanced exercises. All a budding programming language designer needs to be able to read this book is knowledge of discrete mathematics, logic and set notation, and knowledge of at least one high-level imperative programming language. The material is presented in a logical order and always well motivated, and the programming language issues are used as a means to reinforce the formalism and demonstrate its effectiveness in defining language semantics.
Chapter 1 addresses programming languages and their description. The author makes it clear why a compiler or a natural language description of a programming language is both inadequate and more time-consuming than a formalism to describe a language feature and then be able to demonstrate properties of that language feature. This includes motivating the benefits of a formalism as a tool to help identify language interactions or poorly defined language features. Chapter 2 focuses on the differences between concrete syntax and abstract syntax, and helps the reader consider the essential semantic components rather than be drawn to a superficial concrete syntax notation. Chapter 3 introduces the operational semantic model used throughout the book. Knowledge of set notation, logic, and discrete mathematics is essential for this chapter.
The application of the formalism really begins in chapter 4. Chapter 5 focuses on issues surrounding types; it then turns its attention to block structures and their corresponding features, such as parameter parsing, and chapter 6 addresses other issues in sequential languages, such as own variables, objects and methods, heap variables, and functions.
Chapter 7 points out to the reader that there are other formalisms that exist. These include denotational semantics and an axiomatic approach such as Hoare axiomatics. A direct comparison of the various approaches and their limitations, including the relative benefits to each other, is lacking. The remaining chapters in the book, while primarily based on the VDM-like notation, periodically reference the other approaches.
The remainder of the book (chapters 8 to 11) addresses programming language aspects outside of the sequential programming language framework. Specifically, concepts such as shared variables, concurrent object-oriented languages, continuations, and exception handling.
Five appendices complete the book. Appendices A through C provide support and a consolidation of the material covered in chapters 4 through 6. Appendix D provides the programming language semantics for the language COOL. Finally, Appendix E provides the VDM notation.
One omission with this book is instructor support by way of PowerPoint presentations or an equivalent. None are referenced in the book, and a web search also failed to reveal any. Any instructor planning on developing a slide deck based on this textbook should be prepared to invest substantial time, since PowerPoint does not lend itself to easily present the notation used by VDM.