Chapter 1 Preliminaries 1.1 Reasons for Studying Concepts of Programming Languages 1.2 Programming Domains 1.3 Language Evaluation Criteria 1.4 Influences on Language Design 1.5 Language Categories 1.6 Language Design Trade-Offs 1.7 Implementation Methods 1.8 Programming Environments Chapter 2 Evolution of the Major Programming Languages 2.1 Zuse''s Plankalkal 2.2 Minimal Hardware Programming: Pseudocodes 2.3 The IBM 704 and FORTRAN 2.4 Functional Programming: LISP 2.5 The First Step Toward Sophistication: ALGOL 60 2.6 Computerizing Business Records: COBOL 2.7 The Beginnings of rimesharing: BASIC 2.8 Everything for Everybody: PL/l 2.9 Two Early Dynamic Languages: APL and SNOBOL 2.1O The Beginnings of Data Abstraction: SIMULA 67 2.11 Orthogonal Design: ALGOL 68 2.12 Some Important Descendants of the ALGOLs 2.13 Programmlng Based on Logic: Prolog 2.14 Histoty''s Largest Design Effort: Ada 2.15 Object-Oriented Programming: Smalltalk 2.16 Combining Imperative and Object-Oriented Features: G 2.17 Programming the World Wide Web: Java Chapter 3 Oesfdbing Syntax and Semantics 3.1 lntroduction 3.2 The General Problem of Describing Syntax 3.3 Formal .Methods of Describing Syntax 3.4 Attribute Grammars 3.5 Describing the Meanings of Programs: Dynamic Semtantics Chapter 4 Lexpter and Syntax Analysis 4.l Introduction 4.2 Lexical Analysis 4.3 The Parsing Problem 4.4 Recursive-Descent Parsing 4.5 Bottom-Up Parsing Chapter 5 Names, Bindings, Type Checking, and Seopes 5.1 Introduction 5.2 Names 5.3 Variables 5.4 The Concept of Binding 5.5 Type Checking 5.6 Strong Typing 5.7 Type Compatibility 5.8 Scope 5.9 Scope and Lifetlme 5.1O Referencing Environments 5.11 Named Gonstants 5.12 Variable Initialization Chapter 6 Data Types 6.1 Introduction 6.2 Primitive Data Types 6.3 Character String Types e.4 User-Defined Ordinal Types 6.5 Array Types 6.6 Array Types 6.7 Rncord types Contents 6.8 Union Types 6.9 Set Types 6.10 Pointer Types Chapter 7 Expressions and Assignment Statements 7.1 Introduction 7.2 Arithmetic Expressions 7.3 Overloaded Operators 7.4 Type Conversions 7.5 Relational and Boolean Expressions 7.6 Short-Circuit Evaluation 7.7 Assignment Statements 7.8 Mixed-Mode Assignment Chapter 8 Statement-Level Control structures 8.1 Introduction 8.2 Compound Statements 8.3 Selection Statements 8.4 Iterative Statements 8.5 Unconditional Branching 8.6 Guarded Commands 8.7 Conclusions Chapter 9 Subprograms 9.1 lntroduction 9.2 Fundamentals of Subprograms 9.3 Design Issues for Subprograms 9.4 Local Referencing Environments 9.5 Parameter-Passing Methods 9.6 Parameters That Are Subprogram Names 9.7 Overloaded Subprograms 9.8 Generic Subprograms 9.9 Separate and Independent Compilation 9.10 Design Issues for Functions 9.1l Accessing Nonlocal Environments 9.12 User-Defined Overloaded Operators 9.13 Coroutines Chapter 10 Implementing Subprograms 10.1 The General Semantics of Calls and Returns 10.2 Implementing FORTRAN 77 Subprograms 10.3 Implementing Subprograms in ALGOL-like Languages 10.4 Blocks 10.5 Implementing Dynamic Scoping 10.6 Implementing Parameters That Are Subprogram Names Chapter 11 Abstract Data Types 11.1 The Concept of Abstraction 11.2 Encapsulation 11.3 Introduction to Data Abstraction 11.4 Design Issues 11.5 Language Examples 11.6 Parameterized Abstract Data Types Chapter 12 support for Object-Oriented Programming 12.1 Introduction 12.2 Object-Oriented Programming 12.3 Design Issues for Object-Oriented Languages 12.4 Overview of Smalltalk 12.5 Introduction to the Smalltalk Language 12.6 Smallalk Example Programs 12.7 Large-Scale Features of Smalltalk 12.8 Evaluation of Smalltalk 12.9 Support for Object-Oriented Programming in C 12.10 Support for Object-Oriented Programming in java 12.11 Support for Object-Oriented Programming in Ada 95 12.12 Support for Object-Oriented Programming in Eiffel 12.13 The Object Model of JavaScript 12.14 Implementation of Object-Oriented Constructs Chapter 13 Conurrency 13.1 Introduction 13.2 Introduction to Subprogram-Level Concurrency 13.3 Semaphores 13.4 Monitors 13.5 Message Passing 13.6 Concurrency in Ada 95 13.7 Java Threads 13.8 Statement-Level Concurrency Chapter 14 Exteption Handling 14.1 Introduction to Exception Handling 14.2 Exception Handling in PL/I 14.3 Exception Handling in Ada 14.4 Exception Handling in C 14.5 Exception Handling in Java Chapter 15 Functional Programming Languages 15.1 Introduction 15.2 Mathematical Functions 15.3 Fundamentals of Functional Programming Languages 15.4 The First Functional Programming Language: LISP 15.5 An Introduction to Scheme 15.6 COMMON LiSP 15.7 ML 15.8 Haskell 15.9 Applications of Functional Languages 15.10 A Comparison of Functional and Imperative Languages Chapter 16 Logic Poegramming Languages 16.1 Introduction 16.2 A Brief Introduction to Predicate Calculus 16.3 Predicate Calculus and Proving Theorems 16.4 An Overview of Logic Programming 16.5 The Origins o fProlog 16.6 The Basic Elements of Prolog 16.7 Deficiencies of Prolog 16.8 Applications of Logic Programming 16.9 Conclusions Blbllograpby Index