CS 375: Compilers

Summer 2017: 2:30 - 4:00 in GDC 1.304, Unique No. 87055.

Guns are prohibited in the instructor's office. I do not want any guns to be brought to my class. I will not write recommendations for anyone who brings a gun to campus.

Instructor: Gordon S. Novak Jr., GDC 3.824; Office Hours: 4:00 - 5:00 PM, or any time my door is open.


Prerequisites: CS 314 and CS 429. Recommended: CS 439 and CS 345.

Optional Text: Aho, Lam, Sethi, & Ullman, Compilers: Principles, Techniques, and Tools

Course Notes: Strongly recommended. Available in GSB 3.136 . Available on-line by Contents or Index or PDF. Also see the Vocabulary.

iClicker: Each student is required to buy/rent an iClicker (any version of iClicker device; not iClicker GO app). This will be used for attendance and to reinforce and practice with the class material. Two iClicker points are given just for voting, and an additional point is given for a correct answer. Most iClicker questions and answers are online at Clicker Questions, and it is okay to review them in advance. The clicker scores will be converted to a grade by making the highest student score at least 108 and linearly scaling other scores; this gives some extra points to account for minor illness, forgotten or malfunctioning clicker, etc. Bringing another student's clicker to class is considered to be cheating.

Register your iClicker via Canvas.

Web Page: http://www.cs.utexas.edu/users/novak/cs375.html

Program Directory: /projects/cs375/ on CS Linux machines.

FTP Directory: ftp://ftp.cs.utexas.edu/pub/novak/cs375/

Course Description:

CS 375 covers the design of Compilers, which translate programming languages that are easy for humans to use (Java, C++, etc.) into the difficult-to-understand machine language that is executed by computer hardware. Because machine language is the only language that can actually be executed, the compiler, along with the operating system, is one of the central pieces of systems software that makes computers usable.

This course will cover the full range of compiler topics. Each student will write a real compiler for most of the Pascal programming language, producing machine code that we will run on hardware. This compiler is an excellent capstone project for a degree in Computer Science: it is a large project that produces an industrial-scale software product. Algorithms, Data Structures, Programming Languages, Architecture, and Theory are combined in a compiler, so this course brings together the courses of the undergraduate CS curriculum into a coherent whole.

By the end of the course, the student will have completed a significant rite of passage and have the confidence of having written a major component of systems software.

The course covers the major parts of a compiler, in the order in which they operate in the compiler itself:

Readings in Aho, Lam, Sethi, and Ullman:

Grading Policies:

Grades are kept on Canvas. It is your responsibility to check your grades often to make sure that your assignments have been received and graded.

Course grades are assigned on the scale A = 93-100, A- = 90-93, B+ = 87-90, B = 83-87, B- = 80-83, etc. provided that the Final Exam grade is at least 65; if the Final Exam grade is below 65, a lower course grade may be assigned at the instructor's discretion. Grades are averaged using the following weights:
Midterm Exam 20% Friday, July 28, in class
Final Exam 30% Monday, August 14, 7-10 PM
Clicker Participation 10%
Programming Assignments: (10% per day late penalty)
Lexical Analyzer 06%
Lexical Analyzer using lex 04%
Parser (total of 3 parts) 18%
Code Generator 12%

All students must complete all exams and programming assignments. This course has a very heavy programming load, especially in Summer; students should not take other classes or work while taking CS 375 in Summer.

Programming projects must be your own individual work. Students may discuss concepts or help with specific problems in another student's code. However, sharing code, working together on program design or flowcharts, or reading someone else's code is not allowed. All code that is given in the class directory may be used as part of your programs.