CSC437   Theory and Implementation of Programming Languages     Spring 2006

Links:  Schedule     Homeworks and programming assignments   
             Programming Language Resources from Louden     Scheme R5R5 report

Instructor and Office Hours
Lonnie Fairchild
Office: Redcay 147     (Enter through Computer Science Dept.)
Phone: 564-2783,         Computer Science Office: 564-2788
Email: lonnie.fairchild@plattsburgh.edu,         
Office hours:     Mon.  3-5                  
                        Wed.  1:45-2:45                      Thurs. 4:30  – 5:30
                         Fri.    10:30 - 11:30 
These times will not be convenient for everyone. Students are welcome (and encouraged) to make appointments for other times.

Course Description   
Over the past 40 years, the ways in which computer scientists have looked at and designed programming languages have evolved and have been closely related to their views about the nature of the activity of programming. We will study concepts useful in understanding both the general features common to all programming languages as well and the more specific similarities and differences between languages. We will look at some techniques for implementing compilers and interpreters for different types of languages.  Language design criteria and questions of what makes one language better than another for a particular application will also be discussed.
       There will be four programming assignments.   Some of these will focus on language implementation (extending or modifying an implementation of a "mini" language); others will involve applying the concepts of the course to learning new languages. 
Some assignments will require group work.
        Corequisite: CSC 314

Objectives    
     1.  To become familiar with concepts and formal methods used in studying computer languages.
     2.  To understand the basics of how programming languages are defined, constructed and implemented. 
     3.  To develop and understanding the similarities and differences among languages that will make it possible to use programming languages more  effectively and to learn new languages more easily.

Required Text     Kenneth Louden, Programming Languages: Principles and Practice, Thomson Course Technology, 2003,  ISBN 0-534-95341-7
Readings may also be taken from online materials, including:
H. Abelson, G. Sussman, with J. Sussman, Structure and Interpretation of Computer Programs, 2nd ed., MIT Press, 1993 (web version:     http://mitpress.mit.edu/sicp/sicp.html)

Grading The final course grade will be computed as follows:
            Quizzes                                       40 %
            Final exam  (take-home )             10 %
            Programming assignments             40 %
            Class participation                        10 %

Quizzes A short written quiz will be given on most Thursdays. Questions will come from the assigned readings and exercises, material discussed in the previous classes, and recently completed programming assignments.  Occasionally, take-home quizzes will be given instead.

Class participation  and attendance policy      This course depends heavily on class discussion and it is essential that all students participate actively in the class. (Note: This does not require that you speak constantly. It does require that you come to class prepared, with a willingness to listen carefully to what others say and a willingness to share the thinking that you have put into your assignments.) Hence, students will be expected to attend all classes. Students who must miss a class should notify (email or phone) the instructor before the class. The instructor is glad to help anyone who needs to make up work due to unavoidable emergencies (illness, etc.).

Group work      Working in pairs or small groups will be useful on some of the programming assignments.  Collaboration can make the work more interesting, and provide valuable opportunities to learn from other students and refine your thinking. When submitting assignments in which collaboration took place, the names and contributions of all collaborators must be clearly listed.  If collaboration is appropriate on an assignment, more detail will be provided when the assignment is handed out.

Academic honesty       All work submitted as your own (or as your group's) must be your own. A student who is found guilty of cheating on an exam or assignment risks failing the course.

Class format    The subject matter requires both mastery of technical material and reflection upon the implications of this material for language design. Class time will be divided about equally between presentations of technical material and discussion on study questions and exercises.  Homework exercises (generally done with pencil and paper) will be assigned regularly.   Students may occasionally be asked to make short, informal, oral presentations (with advance notice) on their answers to homework problems.

Links:  Topics covered  

03/23/06