Professor Tom Valente
Office: Bagby 123
Phone: ext. 6210
Office hours: M-Th 2:30 PM - 4:00 PM, and other times when my office door is opened.
Concepts of Programming Languages, Fourth Edition (1999) , by Robert W. Sebesta
On To Java, Second Edition (1998) by Patrick Henry Winston and Sundar Narisimhan
Since most of us can claim familiarity with only the first of these paradigms, it is important that we also investigate non-imperative languages, such as Lisp, Scheme, and Smalltalk, so we can gain an appreciation for how it "feels" to program in a non-imperative language, and for interesting and special features and capabilities they offer us. I hope to provide C++ programs that serve as interpreters for subsets of some of these languages so that we can learn more about these languages and how they may be implemented. We will even be able to add features to these languages - so that if you feel like our version of Lisp should have a "for loop", you can add this feature in a natural sort of way to Lisp.
As for languages we are already familiar with, an understanding of the run-time environments used by compilers should help us to continue our study, begun last fall, of what is happening "behind the scenes" when our program is running and perhaps even to write better programs. These run-time enviroments are what cause such things as subprogram call and return, parameter passing by reference and by value (and other?), scope rules, and dynamic memory allocation to work properly.
Finally, in preparation for the study of the theory of computing, we study in Chapter 3, formal languages, grammars and parse trees. This is the theory underlying Compiler Design.