Course personnel:

 

Name

Office

Phone

Email

Office Hours

Instructor

Ras Bodik

773 Soda

642-2488

bodik@cs.berkeley.edu

Tu 5:30-6:30 
Th 2:30-3:30

T.A.

Bowei Du

464 Soda

642-9076

cs164-tc@imail.eecs.berkeley.edu

Thurs 1-2
Fr 3-4 
511 Soda

T.A.

David Mandelin

517 Soda

643-7106

cs164-td@imail.eecs.berkeley.edu

Mo 1-2
We 1-2
511 Soda

T.A.

Manu Sridharan

517 Soda 

643-7106

cs164-te@imail.eecs.berkeley.edu

Mo 3-4
We 11-12
511 Soda

 

Time and Place:

Lectures

1

TuTh 4:00-5:30

1 LeConte

Bodik

Discussion

Sections

 

101

W 9:00-10:00

285 Cory

 Manu

102

W 10:00-11:00

70 Evans

 Manu

103

W 11:00-12:00

6 Evans

 David

104

W 2:00-3:00

70 Evans

 Bowei

105

W 3:00-4:00

B51 Hildebrandt

 Bowei

The TAs' section notes are available here.

Course description:

From the general catalog: "Survey of programming languages. The design of modern programming languages. Principles and techniques of scanning, parsing, semantic analysis, and code generation. Implementation of compilers, interpreters, and assemblers. Overview of run-time organization and error handling."

In more detail: CS 164 is designed to acquaint students with the design and implementation of modern programming languages, focusing on object-oriented languages and high-level domain-specific languages. The course consists of a theoretical component, which teaches underlying concepts and algorithms, and a practical component, which consists of a significant course project that will be strongly linked to the theoretical component.  In the project, students will implement (i) a compiler for Decaf, a subset of Java; as well as (ii) simple tools for automatically generating some modules of the compiler. Students will write their project in Java.

Course prerequisites:

CS 61A, CS 61B, and CS 61C or equivalent. Also required is the ability to program in Java.

Tentative Syllabus & Schedule of Assignments

Textbook:

Required

lecture notes, plus readings from the recommended books.

Recommended

A. Aho, R. Sethi, and J. D. Ullman, "Compilers: Principles, Techniques, and Tools", 2nd edition, Addison-Wesley, 1986

Crafting a Compiler, 2nd Edition, by Charles Fischer, Richard LeBlanc, and Ron K. Cytron, to be published by Addison Wesley Longman
This book will be available in Copy Central on Euclid, Sep 2.

Programmer's Reference

The Java™ Developer's Guide to Eclipse
Sherry Shavor, Jim D'Anjou, Scott Fairbrother, Dan Kehn, John Kellerman, Pat McCarthy, Addison-Wesley

The above books have been placed on reserve at the library.

Electronic copies of lecture notes will be made available on the course home page.

Written Assignments (a.k.a. homeworks):

Most weeks you will be assigned a written assignment covering material presented in lecture and the readings. The written assignments are to be completed individually. Written assignments will be graded on a simple credit/no credit basis and will not be weighted heavily; the purpose of the assignments is (i) to give you practice with the theoretical material of the course; and (ii) to think more systematically about issued raised in the project, fostering the link between the theoretical and the practical parts of the course.  Spending time on the written assignments pays off on the exams.

Written assignments are due by 4:00 p.m. on the date in the course schedule. Write your name, email address, and section on your assignment. Assignments may be turned in either in class (before the lecture) or in the CS 164 Homework Drop in 283 Soda. To ensure that we know where assignments are, use only these two locations to hand in assignments.

Please do not bring assignments to staff offices.

Project:

The course project consists of five programming assignments. Taken together, the five assignments form a complete implementation of Decaf, a simple but sufficiently powerful subset of Java.  The project will also develop tools (program generators) to help you develop the Decaf compiler more automatically.


Start the programming assignments early! Completing the course project is a large, complex, and rewarding task, which is made much easier by giving adequate forethought to design. The course schedule allows ample time to complete the assignments---take advantage of it. The project components are assigned in roughly increasing order of size and difficulty; proportionately more time is allotted for the later assignments. Later assignments will be weighted more heavily in the final grade. Programs will be evaluated for correctness, organization, and documentation.

Documentation and structuring should be incorporated into programs from the beginning. Neither the instructors, teaching assistants, or readers will help with incomprehensible programs.

Programming assignments may be done individually or in teams of two. (The first programming assignment will be done individually, however.) Teamwork imposes burdens of communication and coordination, but has the benefits of more thoughtful designs and cleaner programs. Team programming is also the norm in the professional world.  We will teach you a real-world tool (CVS) that will enable a team to work on their program concurrently.

Students on a team are expected to participate equally in the effort and to be thoroughly familiar with all aspects of the joint work. Both members bear full responsibility for the completion of assignments. Partners turn in one solution for each programming assignment; each member receives the same grade for the assignment. If a partnership is not going well, the teaching assistants will help to negotiate new partnerships. Teams may not be dissolved in the middle of an assignment.

All programming will be done in Java on Solaris workstations in Cory and Soda Halls using your course accounts.  We strongly recommend using the Eclipse Java IDE, which is installed on the instructional Solaris machines (just type 'eclipse' from your shell prompt), or can be installed for free on your home Windows and Linux machines.  While we are not requiring the use of Eclipse, our instructions for downloading project skeletons and submitting the completed project assignments will assume that you are working in Eclipse on Solaris.

Programming assignments are due at noon on the date in the course schedule. Programming assignments will be turned in electronically; the exact method will be described in the handout of each project assignment. 

Late Policy:

Each student is allocated three free late days (per semester) that can be used on any programming assignment.  For example, you can submit the first programming assignment three days late (not a good idea, see below), or you can submit each of the last three programming assignments one date late.

The free late days are designed to help you deal with family emergencies, so we advice that you don't waste them on early programming  assignments.  Save them for the last, most difficult project assignment.  No additional free late days will be awarded.

After the free late days are exhausted, there is a 10% penalty for each day, or partial day, that a programming assignment is late.

Late written assignments will receive no credit. 

Examinations:

There will be two midterm examinations and a final. The midterms will be held in class on September 30 and November 13

The final exam is scheduled for
Wednesday Dec 17, 2003 at 12:30-3:30 (final exam group 19).

There will be no early or make-up exams. Please plan accordingly!

Discussion sections:

Students are expected to attend discussion sections. Relevant material, especially the details of the programming assignments and software tools, will be covered only in discussion sections.

Grading:

It is impossible to pass the course without doing the programming assignments. The relative weight of the components of your grade will be approximately (note that cs164 will use a new project this semester, and so the relative weights of the programming assignments are very likely to be adjusted after all programming assignments are completed):

Written assignments

5%

Course project I

4%

Course project II

8%

Course project III

8%

Course project IV

10%

Course project V

10%

Midterm I

15%

Midterm II

15%

Final

25%

It is expected that all students understand University policies on academic honesty. Cheating on assignments or exams is very serious and will not be tolerated. In this course, we will use a variation of the standard policy. In this class, it is permissible to talk to other students about assignments, to discuss particular solutions, and even to receive partial solutions (including code) from others. However, all assistance and cooperation must be cited in the assignment write-up. If you receive any assistance from anyone other than course staff or your partner on an assignment, you must acknowledge in the write-up for that assignment who gave assistance and what assistance was given. Grading will take into account how much help a student received from others (the more help, the lower the grade). Failure to acknowledge sources is plagiarism and will be treated as a serious breach of academic honesty. No assistance may be given or received on exams.

You should know that fairly sophisticated plagiarism detection software will be used on the programming assignments.

Readings:

The material presented in class will correspond roughly but not exactly to the material covered in the readings. The readings indicated in the syllabus for the upcoming topics are tentative.

Home Page and Newsgroup:

The class home page for this semester is http://www-inst.eecs.berkeley.edu/~cs164. All course handouts, answers to frequently asked questions, lecture notes, and updates on assignments will be posted. 

The class newsgroup is ucb.class.cs164. It should be accessible from any Unix machine on campus via any newsreader (such as `rn' or `tin' or 'Outlook Express'). Please check the home page and newsgroup regularly for important course information. Students are responsible for changes to assignments posted on the home page or in the newsgroup.

Last modified: Thursday, August 28, 2003 02:15 PM