This course covers concepts and techniques used in the description and definition of programming languages, and in the construction of their translators.
An undergraduate data structures and algorithms course, and an undergraduate compiler course (or permission of instructor)
Topics chosen from among:
* LR parsing techniques
* syntax-directed translation, attribute grammars;
* type systems, type checking and polymorphism;
* data abstraction;
* object-oriented, functional and logic programming paradigms (using Prolog, SML/Scheme and C++/Java);
* language semantics (axiomatic, denotational);
* exception handling;
* topics in compiling for parallel architectures;
* machine independent optimization and compile-time analysis
Written homework, with three programming assignments. A final examination, and possibly a midterm.