CSCI 365 Programming Languages
Spring 2004


Cary G. Gray  
Office: Armerding 114, x5875
Office hours: F 7:30--8:30 a.m.
  MWF chapel--11:55 a.m.
  MWF 1:30--2:30 p.m.

I will be in my office at other times; you are welcome to stop by whenever my door is open. Make an appointment if you need to meet at another time.

Class meetings

Armerding 126
MWF 9:15--10:20 a.m.
Final: 8:00--10:00 a.m., Wednesday, May 5

On-line resources

Additional (and updated) course information will be available at the class page at
http://cs.wheaton.edu/~cgray/2004spring/csci365/
I will e-mail you at your college address when there are major updates. Be sure that you frequently read mail sent there.

Text

Michael L. Scott, Programming Language Pragmatics, Morgan-Kaufman, 2000.
Additional readings will either be placed on reserve or (copyright permitting) duplicated for you.

Description

CSCI 365 Programming Language Concepts. Formal definition of programming languages including syntax and semantics; recursive descent parsing, data structures, control constructs, recursion, binding times, expression evaluation, compiler implementation; symbol tables, stacks, dynamic allocation, compiler compilers. Prerequisite: CSCI 357.

This course is about programming language design and implementation, which are tightly linked. From this study you should gain: All of this will fit within a historical framework of the major lessons that the computing community has (in its better parts, at least) learned.

The formal prerequisite is CSCI 357. What is vitally important is that you: For a variety of reasons, your first written assignment is a pre-test, which I will use to get a better idea of what you already know. Course content will be adjusted based on the information you provide.

Policies

Grading
Exams will count for 60% of your course grade; the balance will be from other graded work, including your participation in class. My assessment of your participation in class (including attendance) may raise or lower your grade by up to one full letter.

Exams
There will be two in-class exams in addition to the final. All exams are cumulative.

Programming assignments
Programming assignments will be of two types. A few assignments will involve programming in (probably) unfamiliar models. The others will pertain to various aspects of language implementation.

Each assignment will have a stated deadline, and you'll be given enough time to allow you some flexibility in scheduling your work. Do not procrastinate, however: you'll be able to get assistance only if you start reasonably promptly. Late work will be accepted, but may receive no credit.

Other written work
There will be other written homework, often based on problems from the text. You should be ready to turn it in at the beginning of the class when it is due, though we will usually take some time to discuss it before you turn it in. Grading on such homework will be principally checking that you have made a good-faith effort at it. Please be sure that written work is neat and legible; multiple pages should be stapled.

In addition, each of you will be responsible for preparing a brief (one or two pages) overview of a language or language family, including placing it historically and providing some evaluation. These will be copied for the entire class. Details on these assignments will be provided later.

Opportunities to contribute
If you are interested in making a special contribution to the course, let me know. You might, for example, provide the class with a tutorial on a particular tool, or you might research and present a topic to the class.

Preparation and attendance
We can use our class time most effectively if you come prepared. I expect you to attempt the reading as assigned; come prepared with questions.

You'll do well to think of this class as your job---and a job you intend to keep. I expect you to be here---on time. I'll try not to waste your time. Arriving late is disruptive for everyone else, and so will be treated for purposes of grading as intentional rudeness.

If you must miss class, let me know in advance. E-mail or a voice-mail message is ideal. In the event of an emergency such that you can't notify me ahead of time, let me know as soon as is practical. If you haven't been responsible, you should not expect any opportunity to make up what you miss.

Academic integrity.
I expect you to conduct yourself honestly in this course. When you submit work, you assert that it is your own. If you use an outside source or receive assistance, acknowledge it. Deliberate misrepresentation will result in no credit for the assignment; a second offense will result in failing the course. All offenses will be reported and are subject to college disciplinary action as well.

Because you are encouraged to work together and provide each other assistance, you do risk inadvertent plagiarism. Be cautious, especially when you ask for or provide assistance. Make sure that you don't let someone else do your work for you, and make sure that you don't do someone else's work.

Outline

The initial plan is to cover all but the starred sections from chapters 1--4 and 6--12 from the textbook, plus section 2.3. Additional detail will be provided after I see your pre-tests.
  1. Introduction/motivation [1]
  2. Syntax [2]
  3. Lifetime and naming [3, 10.2.1]
  4. Semantic analysis [4]
  5. Code generation and linking [9]

  6. Control I: basic structures [6.1--5,6.7--]
  7. Data types I [7]
  8. Control II: Subroutines, exceptions, and coroutines [8,6.6]
  9. Functional programming [6, 11.1--2]
  10. Logic programming [11.3]
  11. Language support and concurrency [12]
  12. Data types II: Object orientation [10]

Initial assignments

Reading assignments are from the textbook. Numeric assignments are exercises from the textbook.
Date Reading Assignments    
Jan 12     Introduction
14 ch. 1 Pre-test, 1.1 More on context; syntax
16 ch. 2--2.1    
19 Martin Luther King holiday

A more complete schedule will be distributed separately, and updated online.
This document was translated from LATEX by HEVEA.