Compiler Design

Course Objectives

Compilers translate programs written by humans in high-level languages to programs which can be executed by machines. They are very important, heavily used and at the same time one of the most complex pieces of software. A whole range of techniques and ideas from Automata Theory, Algorithm Design, Computer Organization and Architecture, etc. are cleverly applied to create a compiler. In this course, students will learn in depth the various phases involved in the compilation process. The course will also involve implementing an actual compiler for a subset of the Java language.

Goal of the course: At the end of the course, students will have a fair understanding of some standard passes in a general purpose compiler. Students will have hands on experience on implementing a compiler for a subset of Java.

Essential Details

Textbooks

Primarily,

Reference,

Grading

Item Weightage (%)
Assignments 40%
Short quizzes (3 x 3%) 9%
Quiz1 12%
Quiz2 12%
EndSem 27%
Extra: Class Participation Upto 5%


The three short quizzes are 15 minutes each, held in class, and are multiple choice or one-line answers. They fall roughly midway between the start of the course and Quiz 1, between Quiz 1 and Quiz 2, and between Quiz 2 and the end semester exam. Dates are announced in class.

Acknowledgements

The course builds upon materials from Kartik Nagar (IITM), V Krishna Nandivada (IITM), Tony Hosking (ANU), Jens Palsberg (UCLA) and Alex Aiken (MIT).