|
Name |
Office |
Phone |
Email |
Office Hours |
Instructor |
Ras Bodik |
773 Soda |
642-2488 |
Tu 5:30-6:30 |
|
T.A. |
Bowei
Du |
464
Soda |
642-9076 |
|
|
T.A. |
David Mandelin |
|
|
|
|
T.A. |
Manu
Sridharan |
517 Soda |
643-7106 |
|
Lectures |
1 |
TuTh 4:00-5:30 |
|
Bodik |
Discussion Sections
|
101 |
W
9:00-10:00 |
285
Cory |
|
102 |
W 10:00-11:00 |
70
Evans |
|
|
103 |
W 11:00-12:00 |
6 Evans |
|
|
104 |
W 2:00-3:00 |
70
Evans |
Bowei |
|
105 |
W 3:00-4:00 |
B51
Hildebrandt |
|
The TAs' section notes are available
here.
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.
CS 61A, CS 61B, and CS 61C or
equivalent. Also required is the ability to program in Java.
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 |
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.
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.
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.
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.
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
There will be no
early or make-up exams. Please plan accordingly!
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.
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.
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.
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