CS 453 teaches students how to implement interpreters and compilers. 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, testing, and the visitor design pattern. Students write a compiler for a subset of Java called MeggyJava. We compile MeggyJava to the assembly language for the ATmega328p microcontroller in the Meggy Jr RGB devices. |
|
In order to understand the material in this course, you will need to have a good working knowledge of data structures such as linked lists, trees, symbol tables, and dynamically allocated structures. You will need to know how to implement these data structures in Java, C, and C++. To successfully complete this course, you should be familiar with material related to the above topics covered in CS200 (Algorithms and Data Structures), CS253 (Problem Solving with C++), and CS314 (Software Development Methods). You will also need to have a good understanding of the memory model and the concept of calling conventions as covered in CS270 (Computer Organization).
Modern Compiler Implementation in Java (Second Edition) by Andrew Appel, Cambridge, 2002.
The progress page of this web site contains links to each weeks reading. Students are responsible for doing the assigned reading prior to the lecture in which the material is to be covered. Reading assignments are announced in class. Students in doubt about reading assignments are encouraged to ask for clarification in lecture. There are in-class quizzes.
Here are the formally graded elements of the course and associated weighting:
Activity | Weight |
---|---|
Programming Assignments | 40 % |
Homework Assignments | 10 % |
Quizzes | 10 % |
Midterm | 20 % |
Final Exam | 20 % |
Semester grades are determined by the weighted sum of points earned in each of these areas. A compression curve is used for the midterm and final individually. All other grades in the course are not curved. The grading scale is as follows: >= 90 is an A, >= 88 is an A-, >=86 is a B+, >=80 is a B, >=78 is a B-, >=76 is a C+, >=70 is a C, >=60 is a D, and <60 is an F.
To pass this course, you must maintain at least a 50% average in the assignment grade (programming + homework assignments) and the test grade (quizzes + midterm + final). For example, a 100% in the assignment grade combined with a 49% test grade will NOT result in a passing grade.
The lowest homework and quiz scores will be dropped.
Exams, homework assignments, and quizzes will be done individually and grades assigned on an individual basis.
PA0 from the recitation and PA1 will be done individually and then students will be placed into programming pairs for later assignments. Partners will be selected by the instructor based primarily on similar grades for PA1 and additionally based on student preferences.
Midterm and Finals: Make-up exams are only given for extraordinary circumstances (e.g., illness, family emergency). Students must consult with the instructor as soon as possible, preferably before the start of the exam. Course examination dates are listed in the syllabus; be aware of them and plan accordingly.
Projects: Unless otherwise specified, programming assignments are to be submitted electronically using checkin. Specifics will be included in each assignment. Always check the assignment page for due dates. Late assignments submitted within 48 hours of the time required will receive a 10% late penalty. Electronic submission is closed 48 hours after assignments are due; students not having submitted programs receive an automatic zero on the assignment.
In class midterm | Date TBD (Probably week 7) |
Final Exam | May 8, 2012 (6:20 - 8:20 PM) In Forestry 107 |
Any in-class midterms and the final exam will be held in the same classroom as regular lectures.
All students taking this course are expected to participate actively. This includes asking and responding to questions. The material covered in the recitations will not be covered in lecture and will be on the midterm and final. During some of the recitations, you will need to show the TA a working piece of your current programming assignment. Such checkpoints will be part of the programming assignment grade.
Students are also expected to read the announcements/news on the main course web page, postings to the mailing list, and the progress page every day for any updates. Sign up for the mailing
All students are expected to conduct themselves professionally. We (the instructors and GTAs) assume you are familiar with the policies in the student information sheet for the department. Additionally, you are computing professionals, albeit perhaps just starting. You should be familiar with the code of conduct for the primary professional society, ACM. You can read the ACM Code of Conduct HERE.
We work to maintain an environment supportive of learning in the classroom and laboratory. Towards that end, we require that you be courteous to and respectful of your fellow participants (i.e., classmates, instructors, GTAs and any tutors). In particular: