<!DOCTYPE HTML PUBLIC "-//Netscape Comm. Corp.//DTD HTML//EN">
<html>
<head>
<title>CSE 401 / Admin / Intro</title>
<!--text="#RRGGBB" in hex, hence 16 million colors-->
</head>
<body background="../pic/bkgnd.gif"
         bgcolor="#FFFFFF"
            text="#000000"
            link="#FF0000"
           vlink="#0000FF"
           alink="#FF8080">
<!--==============================================-->
<center>
<!--=======================================================================-->
<IMG SRC="../pic/line3.gif" width=576 height=5 ALT=
"----------------------------------------------------------------------"><br>
<H1>CSE 401: Compilers</H1>

<A HREF=        "../"><IMG border=0 SRC="../pic/btnup_home.gif"
width=70 height=20 ALT="[Home]"></A>
<A HREF=  "../admin/"><IMG border=0 SRC="../pic/btndn_admin.gif"
width=70 height=20 ALT="[Admin]"></A>
<A HREF="../details/"><IMG border=0 SRC="../pic/btnup_details.gif"
width=70 height=20 ALT="[Details]"></A>
<A HREF=   "../help/"><IMG border=0 SRC="../pic/btnup_help.gif"
width=70 height=20 ALT="[Help]"></A>
<A HREF=  "../other/"><IMG border=0 SRC="../pic/btnup_other.gif"
width=70 height=20 ALT="[Other]"></A>

<H2>Administration / Introduction</H2>

<!--==================================================================-->
<IMG SRC="../pic/line2.gif" width=576 height=4 ALT=
"----------------------------------------------------------------------"><p>

<table border=0><tr><td>

<H3 align=center>Course Description</H3>

The primary goal of the course is to learn the basic principles and practice
of compiler construction.  The principles (and some of the practice) will be
covered in lectures and readings.  The practice in applying these principles
will be acquired by modifying an existing compiler.

<p>

A secondary intent of the course is to give you some experience in working
with a software system that you didn't write and that may be larger than what
most of you have dealt with previously.  Since the compiler is written in C++,
and is relatively well-structured, you will also gain some experience with
object-oriented programming in general and C++ in particular.

<H3 align=center>Communication</H3>

Please aggressively use our office hours to clarify problems you
are having in understanding the material, to ask other questions
about compilers, etc.  Email is a good way to ask questions,
particularly well defined ones.  Please send questions that
might be of interest to others in the class to the course
mailing list, 
<a href="mailto:cse40 at s.washington.edu">cse401 at cs</a>, which is
also <a href="../hype">archived</a> on the Web.
Students should feel free to answer questions posted to the
list.  There is no better way to test your understanding of a
concept than to explain it to others.  Questions of less general
interest should be directed to 
"<a href="mailto:401admi at s.washington.edu">401admin at cs</a>", 
which the instructor and TAs will all read.  (Of course, if you
want to send mail to individual staff members you're free to do
so.)  We'll post key questions and answers, as well as updates
on problems, etc., to the class mailing list.

<H3 align=center>Books</H3>

The primary <A HREF="book.html">book</A> for the course is
<i>Compilers---Principles, Techniques, and Tools</i> by Aho, Sethi,
and Ullman (ASU).  This book is colloquially called the "Dragon Book"
(or even sometimes the "Red Dragon Book", since the first edition had
a green dragon on the cover).

<H3 align=center>C++, Tools, etc.</H3>

Effectively using C++ and the support tools for C++ is critically important in
reducing the amount of time you spent on the course project.  It may never, at
any single moment, seem worth the investment in learning about (say) the gdb
debugger.  But the long-term payoff is great.

<H3 align=center>The Project</H3>

This class includes a substantial implementation project.  You will modify and
extend an existing compiler, written in C++, for a simple Pascal-like language
called PL/0.  Your modifications will extend the language by adding new syntax
and semantics, turning PL/0 from a barely usuable programming language into a
quite reasonable one.  An overview of the project is 
<a href="../details/project.html">here</a>.

<p>

The project will be broken up into several stages, paralleling the study of
compilers in the text and lectures.  Some lectures will explore how the PL/0
compiler is organized and how textbook techniques are realized in the PL/0
compiler.

<p>

Each language addition will require language design and specification work
(extending the initial PL/0 language specification to include the new
features), as well as implementation work (extending the initial C++
implementation of PL/0 to compile the new features).  Emphasis in the
implementation should be placed on making clean, understandable changes that
fit in well to the existing compiler structure.  This will make reading the
changed code easier, both for the TAs and for you.  Low-level hacks, even for
better compiler efficiency, should not be done, at least not without first
consulting one of the course staff.  Grades will be based both on program
correctness and efficiency, as well as modularity, style, and readability.

<p>

The "front end" phases of the compiler are very portable, and
can be run on just about any system with a C++ compiler.
Because the compiler targets the MIPS processor, however, it is
not currently possible to test generated code except on a MIPS
machine or a MIPS emulator such as SPIM (which is available on
the instructional Alphas: San Juan/Orcas/...)
<!-- There is a chance that a port of the back end to DEC alphas will -->
<!-- be ready mid-quarter.  There is also an untested port of the -->
<!-- project software to PCs running Windows 95 or NT.  If you would -->
<!-- like to use that version, and are willing to accept the risk -->
<!-- that it is riddled with bugs, please get in touch with me. -->

<p>

<H3 align=center>Project Teams</H3>

<!-- Barring exceptional circumstances (e.g., serious difficulties -->
<!-- arranging to meet team-mates),  -->
Projects normally will be done by two- or three-person teams.
The reason for having a team is that you (hopefully) will learn
to work well together and work less, while learning more.  You
may dissolve your group at any time during the quarter by having
all partners send mail to me or a TA 
<!-- ON THE DAY A PROJECT ASSIGNMENT IS DUE -->
saying that the team is dissolved, and telling us about any new
teams you may have formed.  Grades are given jointly to each
group for each stage of the project on which they work together.
We will be arranging team accounts for those groups of people
who want to work together.

<H3 align=center>Problem Sets</H3>

In addition to the project there will be occasional homework
problems.  The problems will focus on general and theoretical
material in the textbook, complementing the practical but
specific material in the project.  Unless otherwise specified,
homework problems 
should be done individually, not in teams.
<!-- can also be done with a (possibly different) team of 2 or 3.  --0-->

<H3 align=center>Late Policy</H3>

<!-- I think I've tried every possible late policy at some time or other.  None of -->
<!-- them is perfect.  The one that works best, and that we'll adopt this quarter, -->
<!-- is the simplest: no late assignments.   -->
Assignments are due at the beginning of class on the assigned
date.  Assignments will be accepted with no penalty during a
"grace period" up to 5:00 PM (as determined by time stamp on
electronic turnins) on the due date, but such assignments may be
graded and returned later than on-time submissions.  Except in
exceptional circumstances, late submissions lose 10% per
calendar day.


<h3 align=center>Examinations</H3>

See the <a href=schedule.html>schedule</a> for the tentative
date of the midterm and the date of the final.  The midterm will
of course cover the first part of the course; the final will
concentrate on the second part, but not exclusively.  Both exams
will be closed book.

<H3 align=center>Grading</H3>

As a guideline, 
  the midterm accounts for 15% of the grade, 
  the final accounts for 25% of the grade, 
  the written assignments account for 20% of the grade,
and 
  the project accounts for 40% of the grade.  
<!-- I try to make (upward) adjustments that overlook -->
<!-- individual, anomalously poor grades.  (But, don't interpret this -->
<!-- to mean that you can simply ignore one assignment.) -->

<H3 align=center>Cheating</H3>

You may discuss ideas, assignments, the PL/0 compiler, etc. with anyone you
wish.  Your solutions, however, must be entirely your own and your partners'.

<!-- %3CH3 align=center%3EAbsences%3C/H3%3E -->
<!--  -->
<!-- I'm scheduled to be out of town on October 22-25 (a conference), and -->
<!-- in town but off campus (at another conference) October 30-November 1 -->
<!-- (another conference).  There will be guest lecturers on those days. -->

</td></tr></table>

<!--==================================================================--><p>
<IMG SRC="../pic/line3.gif" width=576 height=5 ALT=
"----------------------------------------------------------------------"><p>
<address>
<A HREF="mailto:401admi at s.washington.edu">401admin at cs.washington.edu</A>
(Last modified: 10/02/98)</address><p>

<A HREF="http://ugweb.cs.ualberta.ca/~gerald/validate/?url=http://www.cs.washington.edu/education/courses/401/CurrentQtr/admin/intro.html">
<IMG border=1 SRC="../pic/valid_mcom.gif" width=48 height=32
ALT="Netscape-HTML Checked!"></A>

</center>
</body>
</html>
