With the increasing diversity and complexity of computers and their applications, the development of efficient, reliable software has become increasingly dependent on automatic support from compilers and other program analysis and translation tools. This course covers principal topics in understanding and transforming programs at the code block, function, program, and behavior levels. Specific techniques for imperative languages include data flow, dependence, inter-procedural, and profiling analyses; resource allocation; and program transformation for locality and parallelism. Necessary parts of programming language theory are also covered, including basic lambda calculus and the correctness of program transformation.
Course projects include a program analyzer and optimizer for compiling a subset of the C programming language. Meets jointly with CSC 455, a graduate-level course whose requirements includes a broader group of topics and a more complex version of the project.
Prerequisite: CSC 254; CS 252 recommended.
Last updated 1/16/2008 by Marty Guenther (marty@cs.rochester.edu)