The book provides readers with a solid foundation in the syntax, semantics, and pragmatics of the full range of programming languages, from traditional languages like C to the latest in functional, scripting, and object-oriented programming. This fourth edition has been heavily revised throughout, with expanded coverage of type systems and functional programming, a unified treatment of polymorphism, highlights of the newest language standards, and examples featuring the ARM and x86 64-bit architectures.
Key Features
- Updated coverage of the latest developments in programming language design, including C & C++11, Java 8, C# 5, Scala, Go, Swift, Python 3, and HTML 5
- Updated treatment of functional programming, with extensive coverage of OCaml
- New chapters devoted to type systems and composite types
- Unified and updated treatment of polymorphism in all its forms
- New examples featuring the ARM and x86 64-bit architectures
Preface
- Changes in the Fourth Edition
- The Companion Site
- Design & Implementation Sidebars
- Numbered and Titled Examples
- Exercise Plan
- How to Use the Book
- Supplemental Materials
- Acknowledgments for the Fourth Edition
I: Foundations
1: Introduction
- 1.1 The Art of Language Design
- 1.2 The Programming Language Spectrum
- 1.3 Why Study Programming Languages?
- 1.4 Compilation and Interpretation
- 1.5 Programming Environments
- 1.6 An Overview of Compilation
- 1.7 Summary and Concluding Remarks
- 1.8 Exercises
- 1.9 Explorations
- 1.10 Bibliographic Notes
2: Programming Language Syntax
- 2.1 Specifying Syntax: Regular Expressions and Context-Free Grammars
- 2.2 Scanning
- 2.3 Parsing
- 2.4 Theoretical Foundations
- 2.5 Summary and Concluding Remarks
- 2.6 Exercises
- 2.7 Explorations
- 2.8 Bibliographic Notes
3: Names, Scopes, and Bindings
- 3.1 The Notion of Binding Time
- 3.2 Object Lifetime and Storage Management
- 3.3 Scope Rules
- 3.4 Implementing Scope
- 3.5 The Meaning of Names within a Scope
- 3.6 The Binding of Referencing Environments
- 3.7 Macro Expansion
- 3.8 Separate Compilation
- 3.9 Summary and Concluding Remarks
- 3.10 Exercises
- 3.11 Explorations
- 3.12 Bibliographic Notes
4: Semantic Analysis
- 4.1 The Role of the Semantic Analyzer
- 4.2 Attribute Grammars
- 4.3 Evaluating Attributes
- 4.4 Action Routines
- 4.5 Space Management for Attributes
- 4.6 Tree Grammars and Syntax Tree Decoration
- 4.7 Summary and Concluding Remarks
- 4.8 Exercises
- 4.9 Explorations
- 4.10 Bibliographic Notes
5: Target Machine Architecture
II: Core Issues in Language Design
6: Control Flow
- 6.1 Expression Evaluation
- 6.2 Structured and Unstructured Flow
- 6.3 Sequencing
- 6.4 Selection
- 6.5 Iteration
- 6.6 Recursion
- 6.7 Nondeterminacy
- 6.8 Summary and Concluding Remarks
- 6.9 Exercises
- 6.10 Explorations
- 6.11 Bibliographic Notes
7: Type Systems
- 7.1 Overview
- 7.2 Type Checking
- 7.3 Parametric Polymorphism
- 7.4 Equality Testing and Assignment
- 7.5 Summary and Concluding Remarks
- 7.6 Exercises
- 7.7 Explorations
- 7.8 Bibliographic Notes
8: Composite Types
- 8.1 Records (Structures)
- 8.2 Arrays
- 8.3 Strings
- 8.4 Sets
- 8.5 Pointers and Recursive Types
- 8.6 Lists
- 8.7 Files and Input/Output
- 8.8 Summary and Concluding Remarks
- 8.9 Exercises
- 8.10 Explorations
- 8.11 Bibliographic Notes
9: Subroutines and Control Abstraction
- 9.1 Review of Stack Layout
- 9.2 Calling Sequences
- 9.3 Parameter Passing
- 9.4 Exception Handling
- 9.5 Coroutines
- 9.6 Events
- 9.7 Summary and Concluding Remarks
- 9.8 Exercises
- 9.9 Explorations
- 9.10 Bibliographic Notes
10: Data Abstraction and Object Orientation
- 10.1 Object-Oriented Programming
- 10.2 Encapsulation and Inheritance
- 10.3 Initialization and Finalization
- 10.4 Dynamic Method Binding
- 10.5 Mix-In Inheritance
- 10.6 True Multiple Inheritance
- 10.7 Object-Oriented Programming Revisited
- 10.8 Summary and Concluding Remarks
- 10.9 Exercises
- 10.10 Explorations
- 10.11 Bibliographic Notes
III: Alternative Programming Models
11: Functional Languages
- 11.1 Historical Origins
- 11.2 Functional Programming Concepts
- 11.3 A Bit of Scheme
- 11.4 A Bit of OCaml
- 11.5 Evaluation Order Revisited
- 11.6 Higher-Order Functions
- 11.7 Theoretical Foundations
- 11.8 Functional Programming in Perspective
- 11.9 Summary and Concluding Remarks
- 11.10 Exercises
- 11.11 Explorations
- 11.12 Bibliographic Notes
12: Logic Languages
- 12.1 Logic Programming Concepts
- 12.2 Prolog
- 12.3 Theoretical Foundations
- 12.4 Logic Programming in Perspective
- 12.5 Summary and Concluding Remarks
- 12.6 Exercises
- 12.7 Explorations
- 12.8 Bibliographic Notes
13: Concurrency
- 13.1 Background and Motivation
- 13.2 Concurrent Programming Fundamentals
- 13.3 Implementing Synchronization
- 13.4 Language-Level Constructs
- 13.5 Message Passing
- 13.6 Summary and Concluding Remarks
- 13.7 Exercises
- 13.8 Explorations
- 13.9 Bibliographic Notes
14: Scripting Languages
- 14.1 What Is a Scripting Language?
- 14.2 Problem Domains
- 14.3 Scripting the World Wide Web
- 14.4 Innovative Features
- 14.5 Summary and Concluding Remarks
- 14.6 Exercises
- 14.7 Explorations
- 14.8 Bibliographic Notes
IV: A Closer Look at Implementation
15: Building a Runnable Program
- 15.1 Back-End Compiler Structure
- 15.2 Intermediate Forms
- 15.3 Code Generation
- 15.4 Address Space Organization
- 15.5 Assembly
- 15.6 Linking
- 15.7 Dynamic Linking
- 15.8 Summary and Concluding Remarks
- 15.9 Exercises
- 15.10 Explorations
- 15.11 Bibliographic Notes
16: Run-Time Program Management
- 16.1 Virtual Machines
- 16.2 Late Binding of Machine Code
- 16.3 Inspection/Introspection
- 16.4 Summary and Concluding Remarks
- 16.5 Exercises
- 16.6 Explorations
- 16.7 Bibliographic Notes
17: Code Improvement
A: Programming Languages Mentioned
B: Language Design and Language Implementation
C: Numbered Examples
- Additional Resources.docx
- Figures-PDF
- Figures-PPT
- Lecture Slides
- Chapter01_ Introduction_4e.ppt
- Chapter02_Programming_Language_Syntax_4e.ppt
- Chapter03_Names_Scopes_and_Bindings_4e.ppt
- Chapter04_Semantic_Analysis_4e.ppt
- Chapter05_Target_Machine_Architecture_4e.ppt
- Chapter06_Control_Flow_4e.ppt
- Chapter07_Type_Systems_4e.ppt
- Chapter08_Composite_Types_4e.ppt
- Chapter09_Subroutines_and_Control_Abstraction_4e.ppt
- Chapter10_Data_Abstraction_and_Object_Orientation_4e.ppt
- Chapter11_Functional_Languages_4e.ppt
- Chapter12_Logic_Languages_4e.ppt
- Chapter13_Concurrency_4e.ppt
- Chapter14_Scripting_Languages_4e.ppt
- Chapter15_Building_a_Runnable_Program_4e.ppt
- Chapter16_Run-time_Program_Management_4e.ppt
- Chapter17_Code_Improvement_4e.ppt