Contents
Chapter 1 Preliminaries 1
1.1 Reasons for Studying Concepts of Programming Languages 2
1.2 Programming Domains 5
1.3 Language Evaluation Criteria 7
1.4 Influences on Language Design 20
1.5 Language Categories 23
1.6 Language Design Trade-offs 24
1.7 Implementation Methods 25
1.8 Programming Environments 33
Summary • Review Questions • Problem Set 34
Chapter 2 Evolution of the Major Programming Languages 39
2.1 Zuse’s Plankalkül 40
2.2 Minimal Hardware Programming: Pseudocodes 43
2.3 The IBM 704 and Fortran 45
2.4 Functional Programming: LISP 52
2.5 The First Step Toward Sophistication: ALGOL 60 57
2.6 Computerizing Business Records: COBOL 63
2.7 The Beginnings of Timesharing: BASIC 68
Interview: Alan Cooper—User Design and Language Design 72
2.8 Everything for Everybody: PL/I 74
2.9 Two Early Dynamic Languages: APL and SNOBOL 78
2.10 The Beginnings of Data Abstraction: SIMULA 67 79
2.11 Orthogonal Design: ALGOL 68 80
2.12 Some Early Descendants of the ALGOLs 82
2.13 Programming Based on Logic: Prolog 90
2.14 History’s Largest Design Effort: Ada 92
2.15 Object-Oriented Programming: Smalltalk 97
2.16 Combining Imperative and Object-Oriented Features: C++ 101
2.17 An Imperative-Based Object-Oriented Language: Java 104
2.18 Scripting Languages: JavaScript, PHP, and Python 108
2.19 A C-Based Language for the New Millennium: C# 112
2.20 Markup/Programming Hybrid Languages 115
Summary • Bibliographic Notes • Review Questions •Problem Set 117
Chapter 3 Describing Syntax and Semantics 123
3.1 Introduction 124
3.2 The General Problem of Describing Syntax 125
3.3 Formal Methods of Describing Syntax 127
3.4 Attribute Grammars 141
History Note 142
3.5 Describing the Meanings of Programs: Dynamic Semantics 148
History Note 164
Summary • Bibliographic Notes • Review Questions • Problem Set •
Programming Exercises .......................................................................1
1