CS536-F19 Intro to PLs and Compilers

Course Information

This is a 3-credit course on compiler design. We will cover the following topics:

Topic # Lectures
Structural overview 1
Finite state machines 2
Regular expressions 1
Scanning, JLex 2
Context-free Grammars 2
Parsing 2
Syntax-directed translation 2
Java Cup 1
Symbol tables 1
Type checking 2
Runtime environments 2
Locals and globals 1
Parameters 1
Intermediate code generation 3
Machine code generation 2
Optimization 2

There will be a large semester-long programming project (broken down into 6 separate assignments) involving writing a compiler for a very simple language. The compiler will be written in Java, using a variety of tools, including Make, JLex, JavaCUP, and Spim. All students will work alone on the first programming assignment. Computer Sciences and Computer Engineering graduate students will work alone on the remaining assignments; undergraduates, special students, and graduate students from other departments have the option of working in pairs.


Your performance in the course will be evaluated based on the following:

Academic misconduct of any kind will not be tolerated.

Scores and feedback for individual assignments will be reported through Canvas


There will be one midterm exam and one final exam totalling 40% of your grade.

  • Midterm (20%): In class.

  • Final (20%)

Exams are closed-book and will consist of both multiple-choice and written questions. The final will be cumulative but with the majority of the exam on the topics covered since the midterm. You are responsible for material covered in the lectures, readings, and assignments. Note that some details may be covered in the readings but not in the lecture and vice versa.

Conflicts: Any date conflicts must be brought to the instructor's attention during the first week of class.

You MUST bring your student ID to identify yourself.


There are two kinds of assignments in this course: written homeworks and programming assignments. These will be assigned independently of each other and you will frequently have one active assignment of each kind.

There will be six programming assignments worth a total of 40% of your final grade. Accounts are provided on the CS lab computers for you to do your programming work. See the CS Computer Labs page for more information.

There will be ten (written) homework assignments – worth a total of 20% of your final grade.

Submit your homework assignments as PDF files and programming assignments as zip files in the appropriate folder on the course canvas website. See the main page for the actual assignments and due dates.

Collaboration is allowed in pairs if you choose, for students who are not CS or ECE graduate students, and only for programming assignments 2-6. All other assignments must be completed individually with no collaboration. You may discuss high-level ideas with your classmates and the instructor/TA. Re-grade requests must be submitted within a week after assignments are graded.

Ask any questions on Piazza (accessible through Canvas). Before posting a question, please search to ensure your question hasn't already been asked and answered.

Late Policy

Late homework assignments will not be accepted. Programming assignments however have a little leeway:

  • 0-24 hours late: 10% of the total points for the assignment will be deducted.

  • 24-48 hours late: 20% of the total points for the assignment will be deducted.

  • more than 48 hours late: The assignment will not be accepted. This rule is strict!

You are also given five (5) free late days that are automatically applied to reduce or eliminate a late deduction. However, you can only use at most 2 free late days per assignment. Consider them as insurance to be used in emergencies, such as when you may be unable to complete an assignment on time due to illness.