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. Starting this year, we will be writing 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.
To understand the material in this course, you will need to have a good working knowledge of data structures such as linked lists, trees, dictionaries, 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, which are 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, which is covered in CS70 (Computer Organization) at CSU.
Modern Compiler Implementation in Java (Second Edition) by Andrew Appel, Cambridge, 2002.
The above book might be helpful, and suggested readings from this book will be posted on the schedule. There will also be required non-textbook reading assignments posted on the schedule page of this web site. Students are responsible for doing the required 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 will be graded quizzes on the material in the reading assignments.
Here are the formally graded elements of the course and associated weighting:
Semester grades are determined by the weighted sum of points earned in each of these activities. A curve may be used for the midterm and final, but ONLY if these have averages less than 80. 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 60% average each of the following parts of the course: homework (programming assignments, homework assignments and reading quizzes) and the in class work (midterm, and final). For example, a 100% in the homework grades combined with a 59% midterm and final will NOT result in a passing grade.
The homework assignments and reading quizzes will be done individually, and grades assigned on an individual basis. Starting with PA2, it will be required to do the programming assignments in programming pairs. Those who chose to do their assignments on their own will only be able to achieve 90% as a maximum score on a programming assignment. Industry uses pair programming and if you decide not to participate you are not learning/practicing an important skill and therefore will be evaluated as such.
The lowest quiz score will be dropped. There will be approximately 6 or 7 quizzes over the course of the semester. Quizzes will be announced on the web page at least 72 hours before they are due.
Midterm and Final: The midterm and final must be done individually. If you have a family or medical emergency that prevents you from attending a the midterm or the final, let the instructor know as soon as possible and be able to provide documentation such as a doctors note.
Recitation: Information covered in the recitations will be needed for doing well on the programming assignments. Additionally any material covered in recitation may be on the midterm and/or final. There will be 5 programming assignments weighted at 100 points each. (edit 3/29/15, MMS, removed mention of PA0 and going to 5 programming assignments)
Homework assignments and Programming Assignments: There will be 4 written/typed homework assignments that need to be submitted as pdfs using checkin. Scanning in written assignments is possible.
There will be 5 programming assignments. (edit 3/29/15, MMS, removed mention of PA0 and going to 5 programming assignments) Many of the programming assignments can use a Meggy Jr device to run programs. The department loans Meggy Jr devices to all CS 453 students for 1 semester. There is also a simulator for Meggy AVR assembly for grading purposes.
Unless otherwise specified, programming assignments and homeworks are to be submitted using the checkin program and quizzes are to be submitted electronically using Canvas. Specifics will be included in each assignment. Always check the schedule page for due dates.
Late homework and programming assignments submitted within 48 hours of the time required will receive a 10% late penalty per day. Electronic submission is closed 48 hours after assignments are due. Late submissions on quizzes will not be accepted.
Students not having submitted programming assignments, homeworks, or quizzes receive an automatic zero on the assignment.
Students who do not do their own work (e.g., copy someone else's code) will earn a negative score on the first assignment this occurs as is specified in the Department Academic Integrity Policies.
The in-class midterm and the final exam will be held in the same classroom as regular lectures. While no change to the midterm dates is anticipated, the instructor reserves the right to change these dates with a weeks notice.
All students taking this course are expected to participate actively. This includes asking and responding to questions either in class and/or on the RamCT discussion board.
Students are also expected to read the announcements/news on the main course web page, postings to the RamCT discussion board, and the schedule page EVERY DAY for any updates.
Slide sets are available on the class progress web page, however lectures will present material that is not covered anywhere else.
Exams and homework assignments will be done individually and grades assigned on an individual basis. Further, students not already familiar with the CSU Honor Pledge should review this clear and simple pledge and always adhere to it.
All students are expected to conduct themselves professionally. We (the instructors and GTAs) assume you know the policies in the student information sheet for the department. The course will adhere to the Academic Integrity Policy of the Colorado State University General Catalog and the Student Conduct Code, which states that "As a student at Colorado State University, I recognize my active role in building a Campus of Character. This includes my commitment to honesty, integrity, and responsibility within the campus community. As such, I will refrain from acts of academic misconduct." In CS 453, you can talk with other students about the homeworks, but you CANNOT copy answers from each other. One good rule of thumb is to NOT take notes while talking with other students in the class. Just discuss the issues and then go work on your own homework. You should be able to explain your own work to a TA or the instructor at any time.
Additionally, we consider you to be computing professionals. You should be familiar with the code of conduct for the primary professional society, ACM. You can read the ACM Code of Conduct. There is also a code of conduct for the Computer Science Department.
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: