CSC 453: Compilers & Systems Software
Course Home Page
Overview
CS 453 teaches students how to implement programming languages with a compiler. Although most computer science professionals do not end up implementing a full compiler, alumni of this course are surprised by how often the skills they learn are used within industry and academic settings. The subject of compilers ties together many concepts in computer science: the theoretical concepts of regular expressions and context free grammars; the systems concept of layers including programming languages, compilers, system calls, assembly language, and architecture; the embedded systems concept of an architecture with restricted resources; and the software engineering concepts of revision control, debugging, and testing.
Students write a compiler for a subset of Java called MeggyJava. We write the compiler in Haskell so as to learn a new programming paradigm and some programming constructs such as pattern matching that significantly ease the development of compilers (or translators generally). We compile MeggyJava to the assembly language for the ATmega328p microcontroller in the Meggy Jr RGB devices.
Course topics include the following: scanning, parsing (top-down and bottom-up), abstract syntax trees, semantic analysis, code generation, and data-flow analysis.
Pre-requisites
CSC 345 and CSC 352 are require prerequisites. CSC 372 is recommended.
High-Order Bits
The syllabus describes the course in a significant amount of detail. All the students in the class will be expected to read and know the syllabus.
Here are some of the highlights:
- Reading assignments are posted on the schedule.
- Working with a group on the compiler project programming assignments (PA1 through PA5) is optional. Each group can include up to 5 students. Groups are self selected and can be modified throughout the semester. All other graded work will be submitted individually.
- Everyone will be implementing the compiler using Haskell.
- Your code source files will need to remain anonymous (do not put your names in them) to enable all of the code to be shared with the rest of the class. Everyone's code will be shared with the whole class in a github repository accessible by only students in the class.
- Peer reviews will be done individually.
-
The course grade consists of the following:
- Homeworks (HW1-HW9), 15%
- Programming Assignments (PA1-PA5), 15%
- Peer Reviews for PA1 through PA5, 10%
- Midterm 1, 15%
- Midterm 2, 20%
- Final, 25%
- The deadlines for homeworks, programming assignments, and peer reviews are listed in the syllabus and the class schedule.
- Extra credit: Students can earn extra credit by submitting potential midterm or final exam questions. For each question used in one of the midterms or final, the student will obtain 1 extra credit point for that exam. The instructor decides which questions to include on the midterms and the final.