Course Description:
Compilers translate "programs" written in one language
(e.g., C programs, Java programs, LaTeX documents, or hardware descriptions)
into "programs" written in another language
(e.g., machine code, Java byte code, Postscript documents, or circuit layouts).
This course considers the principles that underlie all compilers and
focuses on the problem of translating programs written in a conventional higher-level language
into semantically equivalent programs written in assembly language.
In this course, students will learn how modern programming languages are implemented,
how compilers interact with operating systems and machine architectures,
and how to use compiler construction tools.
The prerequisites for this course are CS 3100 (Models of Computation) and CS 4400 (Computer Systems).
Students who take CS 5470 should already be comfortable with the following concepts.
- Formal notations for describing languages, including regular expressions and context-free
grammars.
- Common algorithms and data structures, including tree, set, and graph representations and
the algorithms that manipulate them.
- The basics of computer architecture, including how machines actually work and
how to program in assembly language.
- The basics of systems programming, including how a computer's memory is organized at run time.
- Reading, writing, and maintaining moderately large Java programs.
CS 5470 is a capstone course, bringing together what students have learned in core undergraduate courses.
The primary goal of this course is to give students a better understanding of
how material learned in software courses
(algorithms and data structures, programming language semantics, and software engineering),
computer architecture courses (assembly language and computer organization),
theory courses (formal language descriptions), and system courses (interaction of programs with system services)
fit together.