Bibliographic Information

Essentials of programming languages

Daniel P. Friedman, Mitchell Wand, Christopher T. Haynes ; foreword by Harold Abelson

MIT Press , McGraw-Hill, c1992

  • : MIT Press
  • : McGraw-Hill
  • : pbk

Available at  / 43 libraries

Search this Book/Journal

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"

Details

Page Top