Essentials of programming languages
Author(s)
Bibliographic Information
Essentials of programming languages
MIT Press , McGraw-Hill, c1992
- : MIT Press
- : McGraw-Hill
- : pbk
Available at 43 libraries
  Aomori
  Iwate
  Miyagi
  Akita
  Yamagata
  Fukushima
  Ibaraki
  Tochigi
  Gunma
  Saitama
  Chiba
  Tokyo
  Kanagawa
  Niigata
  Toyama
  Ishikawa
  Fukui
  Yamanashi
  Nagano
  Gifu
  Shizuoka
  Aichi
  Mie
  Shiga
  Kyoto
  Osaka
  Hyogo
  Nara
  Wakayama
  Tottori
  Shimane
  Okayama
  Hiroshima
  Yamaguchi
  Tokushima
  Kagawa
  Ehime
  Kochi
  Fukuoka
  Saga
  Nagasaki
  Kumamoto
  Oita
  Miyazaki
  Kagoshima
  Okinawa
  Korea
  China
  Thailand
  United Kingdom
  Germany
  Switzerland
  France
  Belgium
  Netherlands
  Sweden
  Norway
  United States of America
Note
Bibliographical references: p. [509]-516
Includes index
Description and Table of Contents
- Volume
-
: MIT Press ISBN 9780262061452
Description
What really happens when a program runs? "Essentials of Programming Languages" teaches the fundamental concepts of programming languages through numerous short programs, or "interpreters" that actually implement the features of a language. Nearly 300 exercises using these programs provide a hands-on undertanding of programming principles that is hard, if not impossible, to achieve by formal study alone. In an approach that is uniquely suited to mastering a new level of programming structure, the authors derive a sequence of interpreters that begins with a high-level operational specification (close to formal semantics) and ends with what is effectively assembly language - a process involving programming transformation techniques that should be in the toolbox of every programmer. The first four chapters provide that foundation for an in-depth study of programming languages, including most of the features of Scheme, needed to run the language-processing programs of the book. The next four chapters form the core of the book, deriving a sequence of interpreters ranging from very high- to very low-level.
The authors then explore variations in programming language semantics, including various parameter-passing techniques for transforming interpreters that ultimately allow the interpreter to be implemented in any low-level language. They conclude by discussing scanners and parsers and the derivation of a compiler and virtual machine from an interpreter.
Table of Contents
- Part 1 Tools for symbolic programming: simple expressions
- data types
- procedures. Part 2 Induction, recursion and scope: inductively specified data
- recursively specified programs
- statis properties of variables. Part 3 Syntactic abstraction and data abstraction: local binding
- logical connectives
- branching
- records
- data abstraction
- from procedural to data structure representations. Part 4 Reduction rules and imperative programming: reasoning about procedures
- the Lambda calculus and Beta-conversion
- reduction strategies
- defining recursive procedures in the Lambda calculus
- sequencing and imperative programming
- variable assignment and sharing
- streams. Part 5 Interpreters: a simple interpreter
- conditional evaluation
- local binding
- procedures
- variable assignment
- recursion
- dynamic scope and dynamic assignment. Part 6 Parameter passing: adding arrays
- call-by-reference
- call-by-value-result and call-by-result
- expressed or denoted values? call-by-name and call-by-need
- optional and keyword arguments. Part 7 Object-oriented languages: objects and classes
- inheritance
- meta-classes. Part 8 Continuation-passing style: iterative control behaviour and proper tail recursion
- introduction to continuation-passing style
- tail form
- converting to continuation-passing style
- examples of the CPS transformation
- implementing the CPS transformation
- call chains. Part 9 Continuation-passing interpreters: data structure representations of continuations
- the continuation interpreter
- making continuations available to the programmer
- upward continuations and coroutines
- leaving and entering control contexts
- dynamic assignment revisited. Part 11 Imperative form and stack architecture: imperative form
- control stacks
- interpreter stack architecture
- stack allocation of continuations and environments. Part 12 Scanners and parsers: lexical scanning using finite automata
- simulating a scanning automation
- constructing a predictive parser
- recursive descent parsers
- table driven parsers. Part 12 Compiler derivation: deriving a compiler and machine from an interpreter
- register allocation
- obtaining more realistic object code
- compiling procedures. Appendices: record implementation
- abstract syntax
- character string syntax
- character string parser
- character string scanner
- a read-eval-print loop
- list structure syntax
- list structure parser
- scheme procedures used.
- Volume
-
: pbk ISBN 9780262560672
Description
What really happens when a program runs? "Essentials of Programming Languages" teaches the fundamental concepts of programming languages through numerous short programs, or "interpreters" that actually implement the features of a language. Nearly 300 exercises using these programs provide a hands-on undertanding of programming principles that is hard, if not impossible, to achieve by formal study alone. In an approach that is uniquely suited to mastering a new level of programming structure, the authors derive a sequence of interpreters that begins with a high-level operational specification (close to formal semantics) and ends with what is effectively assembly language - a process involving programming transformation techniques that should be in the toolbox of every programmer. The first four chapters provide that foundation for an in-depth study of programming languages, including most of the features of Scheme, needed to run the language-processing programs of the book. The next four chapters form the core of the book, deriving a sequence of interpreters ranging from very high- to very low-level.
The authors then explore variations in programming language semantics, including various parameter-passing techniques for transforming interpreters that ultimately allow the interpreter to be implemented in any low-level language. They conclude by discussing scanners and parsers and the derivation of a compiler and virtual machine from an interpreter.
Table of Contents
- Part 1 Tools for symbolic programming: simple expressions
- data types
- procedures. Part 2 Induction, recursion and scope: inductively specified data
- recursively specified programs
- static properties of variables. Part Syntactic abstraction and data abstraction: local binding
- logical connectives
- branching
- records
- data abstraction
- from procedural to data structure representations. Part 4 Reduction rules and imperative programming: reasoning about procedures
- the Lambda calculus and b-conversion
- reduction strategies
- defining recursive procedures in the lambda calculus
- sequencing and imperative programming
- variable assignment and sharing
- streams. Part 5 Interpreters: a simple interpreter
- conditional evaluation
- local binding
- procedures
- variable assignment
- recursion
- dynamic scope and dynamic assignment. Part 6 Parameter passing: adding arrays
- call-by-reference
- call-by-value-result and cally-by-result
- expressed or denoted values?
- call-by-name and call-by-need
- optional and keyword arguments. Part 7 Object-oriented languages: objects and classes
- inheritance
- meta-classes. Part 8 Continuation-passing style: iterative control behaviour and proper tail recursion
- introduction to continuation-passing style
- tail form
- converting to continuation-passing style
- examples of the CPS transformation
- implementing the CPS transformation
- call chains. Part 9 Continuation-passing interpreters: data structure representations of continuations
- the continuation interpreter
- making continuations available to the programmer
- upward continuations and coroutines
- leaving and entering control contexts
- dynamic assignment revisited. Part 10 Imperative form and stack architecture: imperative form
- control stacks
- interpreter stack architecture
- stack allocation of continuations and environments. Part 11 Scanners and parsers: lexical scanning using finite automata
- simulating a scanning automaton
- constructing a predictive parser
- recursive descent parsers
- table-driven parsers. Part 12 Compiler derivation: deriving a compiler and machine from an interpreter
- register allocation
- obtaining more realistic object code
- compiling procedures. Appendices: record implementation
- abstract syntax
- character string syntax
- character string parser
- character string scanner
- a read-eval-print loop
- list structure syntax
- list structure parser
- scheme procedures used
by "Nielsen BookData"