Teaching staff and office hours
Chen Ding, CSB 710, ext. 51373
TA: Bill Scherer,
CSB 620, ext. 55492
Lectures: 3:25pm-4:40pm, Tuesday and Thursday @ CSB 601
Ding: by appointment @ CSB 710
Scherer: 1:30-2:30pm, Mondays and 1-2pm Thursdays @ CSB 620
5% written assignments
65% course projects
13% written documentation
52% program function and quality
Today's programmers face a wide range of programming language features.
For efficiency in embedded systems, one may use static data structures
macros. For extensibility in prototyping, one may favor polymorphic
operations and encapsulated modules. For resource sharing and
one may design a parallel and distributed system. Quite often,
demand at hand is a mixture of many requirements, and the appropriate
solution is probably a combination of several languages/systems.
example, if you were to write a web-based agent, what programming language
or languages would you use? To made such decision, you need to
how programming languages work.
This course teaches fundamental concepts in modern programming languages
explaining their operational definitions, i.e. how they are implementated.
The course will guide students through basic techniques of lexical
semantic analysis, code generation and run-time environment, first-class
functions, static and dynamic typing. The teaching is styled
as a process of problem
solving, so that students will see not only how languages were defined
but also why
they were so designed. To complete the learning experience, students
implement a set of core language features on a real machine.
The basic material of this course is covered by its textbook.
I will emphasize concepts and techniques that are most relevant to
large programs or programs processing large data sets. For this
will focus on high-level language implementation and leave out most
assembly-level issues. Drawing from my own research, I will include
lectures the most recent advances in compilation and language implementation,
especially new techniques for program data management.
Course webpage of Fall 2000
(first one of my version of the course)
webpage of Fall 1999 (a previous, different version by Prof. Michael Scott)
Compilers: Principles, Techniques, and Tool, by A. V. Aho, R. Sethi,
and J. D. Ullman, Addison-Wesley, 1986. (auxiliary reading for parsing
and code generation. On reserve in Carlson)
Introduction to Automata Theory, Language, and Compilation, by J.E.
Hopcroft and J.D. Ullman, Addison-Wesley, 1979. (automata theory behind
Thinking in C++, B. Eckel, Prentice Hall, 1995. (can be used
as a C++ reference book, it contains clear explanation and concise examples.
On reserve in Carlson) Eckel also has an on-line
book on Java
The Lambda Calculus, revised edition, by H.P. Barendregt, Elsevier Science
Publishers B.V., 1984. (Advanced reading for language theory.
Chapter 2 and 3 prove fundamental theorems of lambda calculus. See
instructor if you are interested in reading it.)
Programming in Prolog, by W. Clocksin and C. Mellish, Springer Verlag.
(The standard Prolog textbook)
Component software - beyond Object-Oriented programming, by C. Szyperski,
ACM Press and Addision-Wesley 1997. (Chapter 4 through 7. Excellent
analysis of object-orientation and beyond. On reserve in Carlson.)