General information

Course links

Computer Science 362 is a course in the design and construction of compilers for high-level languages. It includes a team project and extensive practice with GNU tools.

The class meets in Noyce 3819 at 10 a.m. on Mondays, Wednesdays, and Fridays. In addition, on Tuesdays and Thursdays at 10 a.m., I'll be working on this course in the open lab (Noyce 3815) and invite any of you who want to work along with me or have questions that are most appropriately addressed in a lab setting to come in as well. I'll also hold conventional office hours from 11 a.m. to noon on Mondays and from 9 to 10 a.m. on Wednesdays.

The textbook

The textbook for the course is Compilers: principles, techniques, and tools, second edition, by Alfred V. Aho, Monica S. Lam, Ravi Sethi, and Jeffrey D. Ullman (Boston: Addison-Wesley, 2007; ISBN 0-321-48681-1)

The authors have kindly made available a list of errata for the edition we're using.

The instructor

I'm John David Stone. My office is Noyce 3829. I can be reached by telephone at extension 3181, or by e-mail to stone@cs.grinnell.edu.

Requirements and policies

Each student in the course is expected to read the assigned sections of the textbook carefully, to learn the ideas, methods, and techniques that are presented there, to submit solutions to exercises requiring the application of those ideas, methods and techniques, to make substantial contributions to the group project, and to prepare for and attend the sessions of the class.

There will be no in-class examinations for this course, nor will there be a final examination. The class will, however, meet during the final examination period (Wednesday, May 19, from 9 a.m. to noon) to review and finalize the group project.

Readings

The schedule of topics for the course includes reading passages in the timetable. Please study each specified reading before the beginning of the class that follows it in the schedule.

Exercises and project work

I'll assign a set of one or more exercises every Monday, due at 10 a.m. the following Friday. Some of the exercises will involve programming. Others will be theoretical -- similar in nature to most of the textbook's exercises.

The timetable for contributions to the group project will be less tightly structured. I'll maintain a task list, and you can work at your own pace on the tasks

Class attendance

Class attendance is optional. However, if you miss a class session for any reason, you must write up and submit a solution to certain designated exercises for that session, which will be identified in the schedule of topics.

In addition, it is especially helpful if you raise for discussion any questions you may have about the day's topic, the assigned reading, or the exercises. I suggest that you write out such questions as part of your preparation for class sessions.

Grading

Your performance on exercises will determine one-half of your final grade, your contributions to the group project two-fifths, and class attendance and participation and similar imponderables the remaining one-tenth.

At the end of every other week, I'll evaluate your performance and report to you what letter grade I'd give it and what your rank in the class is. I'll use the grading system described in the academic catalog: an A or A− for excellent work, a B+, B, or B− for good work, a C+ or C for satisfactory work, a D for passing work, and an F for failing work.

Late work

I'll accept your solutions to exercises until I begin handing back other students' papers, and I'll wait to do that until at least 1 p.m. on the Monday after the exercise is due. In general, I'd rather have solutions that are good though late than ones that are prompt but defective, so I award full credit for satisfactory papers even if they are late. On the other hand, if you take extra time and still wind up turning in a poor solution, I'm likely to impose a heavier penalty than if you had submitted it on time.

Collaboration and plagiarism

Since you will receive credit for this course on the basis of your individual performance, it would be unethical to submit the work of others as your own. You may, if you like, collaborate on solutions to exercises, but such solutions must be signed and submitted jointly by all the members of the collaboration. You may collaborate only with other students who are currently taking this course.

The group project is, of course, collaborative by nature, and I encourage you to work together on it as much as possible. However, the project will accept only code written by students currently taking this course or by me, not copied or derived from external sources.

Copyrights and software licenses

Under Grinnell College's copyright policy, a student who submits source code or a prose solution to an exercise to satisfy a requirement of this course retains the copyright to it. Similarly, a group that submits such a work has and retains a collective copyright. In either case, however, the College asserts the right to distribute the work within the College community for instructional or administrative purposes without paying any royalty to the student.

You may, of course, choose to publish your work under some more generous license, and for your solutions to exercises I encourage you to use the GNU General Public License (version 3) for software and the Creative Commons Attribution-ShareAlike 3.0 United States License for text. The group project will be licensed under the GNU General Public License (version 3).

No special license accompanied the code that Aho et al. provide, so it appears to be covered by the textbook copyright, which prohibits all reproduction without permission in writing from the publisher. Our uses of it in this course must therefore be restricted to what is permitted by fair use limitations on the rights of copyright holders. In particular, if you copy that code verbatim or write programs derived from it, you should use the copies and derived programs only for non-profit educational purposes and not for commercial purposes, giving due acknowledgement to Mr. Aho, Ms. Lam, Mr. Sethi, and Mr. Ullman, and distribute them only within the College community. We will not need to use any such code in the group project.

Source code that I have created for this course and placed either on the Web or in /home/stone/courses/compilers is licensed under the GNU General Public License. Code released under the GPL can be copied, studied, revised, improved, and redistributed freely, subject to the restriction that any copies or derived programs are released under the same license.

Similarly, course materials that I have created and distributed either on the Web, or in hard copy, or in /home/stone/courses/languages are licensed under the Creative Commons Attribution-ShareAlike 3.0 United States License and can be copied, studied, revised, improved, and redistributed freely, provided that my authorship of the original work is acknowledged and that any copies or derived works are released under the same license.