These texts cover material in more depth for those who are interested. Electronic copies of books are available from the Drexel library where noted.

If you have trouble viewing the electronic copies as linked below, you may need to search for them manually at library.drexel.edu—I have not figured out how to get the Books 24x7 direct links to work reliably. Many of these books are also listed under Course Reserves on Blackboard.

## Principles of Programming Languages

A. Chlipala. 2013. Certified Programming with Dependent Types: A Pragmatic Introduction to the Coq Proof Assistant. The MIT Press. [web site]

An "introduction" to Coq. Focuses on Adam's unique approach to proof in Coq. More sophisticated than Software Foundations.

Felleisen, Matthias, Robert Bruce Findler, and Matthew Flatt. 2009. Semantics Engineering with PLT Redex. The MIT Press. [web site]

PLT Redex is a domain-specific language, embedded in Scheme, for specifying operational semantics. This text both introduces operational semantics and walks through many thorough examples of how to specify semantics using the PLT Redex system.

Friedman, Daniel P., and Mitchell Wand. 2008. Essentials of Programming Languages. 3rd ed. Cambridge, MA: The MIT Press. [web site] [electronic copy]

One of the better introductory programming language texts. EOPL walks through a series of interpreters written in Scheme.

Pierce, Benjamin C. 2002. Types and Programming Languages. Cambridge, Mass: The MIT Press. [web site] [electronic copy]

An excellent introduction to typed programming languages. This text worksthrough the implementation of a number of small, core languages in OCaml.

Pierce, Benjamin C., ed. 2004. Advanced Topics in Types and Programming Languages. Cambridge, Mass: The MIT Press. [electronic copy]

A collection of chapters by experts in the field of typed programming languages.

B. C. Pierce, C. Casinghino, M. Gaboardi, M. Greenberg, C. Hriţcu, V. Sjoberg, and B. Yorgey. 2015. Software Foundations. [web site]

And introduction to the fundamentals of programming languages using the Coq proof assistant.

Nielson, Hanne Riis, and Flemming Nielson. 2007. Semantics with Applications: An Appetizer. London: Springer. [electronic copy]

A leisurely, if somewhat pedantic, introduction to semantics.

## Scheme

Abelson, Harold, Gerald Jay Sussman, and Julie Sussman. 1996. Structure and Interpretation of Computer Programs. 2nd ed. McGraw-Hill. [web site] [html] pdf [other formats]

## Scheme Implementation

The original “Lambda Papers” by Guy Steele and Gerald Sussman.

Here is Wikiepdia's description of the Lambda Papers:

Between 1975 and 1980 Sussman and Steele worked on developing their ideas about using the lambda calculus, continuations and other advanced programming concepts such as optimization of tail recursion, and published them in a series of AI Memos which have become known collectively as the "Lambda Papers".

Queinnec, Christian. 2003. Lisp in Small Pieces. Translated by Kathleen Callaway. Cambridge, U.K.; New York: Cambridge University Press. [web site]

A classic scheme implementation text. It presents a series of Scheme implementations written in Scheme, culminating in a compiler.

Lipovaca, Miran. Learn You a Haskell for Great Good!: A Beginner’s Guide. San Francisco, CA: No Starch Press, 2011. [web site] [html]

This book is available free, online. It's a bit quirky, but many people have enjoyed using it to learn Haskell.

O’Sullivan, Bryan, John Goerzen, and Don Stewart. Real World Haskell. Sebastopol, CA: O’Reilly Media, 2008. [web site] [html]

Another free, online text. Somewhat more difficult for beginners.

## Lexing, Parsing, and Compiling

Aho, Alfred V., and Jeffrey D. Ullman. 1994. Foundations of Computer Science: C Edition. New York: W. H. Freeman. [online version]

Chapter 10 describes finite automata and regular expressions, and Chapter 11 discuses grammars and parsing.

Grune, Dick, Kees van Reeuwijk, Henri E. Bal, Ceriel J. H. Jacobs, and Koen Langendoen. 2012. Modern Compiler Design. 2nd ed. Springer. [electronic copy]

Chapter 2 describes lexing, and chapter 3 describes parsing.

Grune, Dick. 2007. Parsing Techniques. 2nd ed. Springer. [electronic copy]

An extensive description of almost every parsing technique you could ever use.

## Finite Automata and Regular Languages

Aho, Alfred V., Monica S. Lam, Ravi Sethi, and Jeffrey D. Ullman. 2006. Compilers: Principles, Techniques, and Tools. 2nd ed. Boston: Addison Wesley.

Aho, Alfred V., and Jeffrey D. Ullman. 1994. Foundations of Computer Science: C Edition. New York: W. H. Freeman. [online version]

This was at one time the text used for CS 270. Chapter 10 describes finite automata and regular expressions.

Hopcroft, John E., Rajeev Motwani, and Jeffrey D. Ullman. 2006. Introduction to Automata Theory, Languages, and Computation. 3rd ed. Boston: Prentice Hall.

Sipser, Michael. 2012. Introduction to the Theory of Computation. 3rd ed. Cengage Learning.

## Lambda Calculus

Barendregt, Henk. 2012. The Lambda Calculus. Its Syntax and Semantics. London: College Publications.

This is the grandaddy of (untyped) lambda caculus books.

Hindley, J. Roger, and Jonathan P. Seldin. 2008. Lambda-Calculus and Combinators: An Introduction. 2nd ed. Cambridge, UK ; New York: Cambridge University Press.

Another standard reference on lambda calculus which also covers the typed lambda calculus.