Syllabus for
Programming Languages
COSC 337
(MWF 11:00-11:50, PH302)
Instructor: Matt Evett
Dept. Computer Science; room 512E Pray-Harrold
Tel: 734-487-1227; e-mail: evett@emunix.emich.edu;
https://emunix.emich.edu/~evett/ProgrammingLanguages
Office Hours: MW 2:00-5:00
You may drop by at times other than office hours, but in that case
I cannot guarantee that I'll be able to see you.
Prerequisite: COSC 238, 239.
Textbook: Sebesta, Concepts of Programming Languages (4th
edition), Addison-Wesley, 1999 (required).
Graham, ANSI Common Lisp,
Prentice Hall 1996 (recommended).
Course Summary: Students successfully completing this course
will be familiar with those characteristics that distinguish most major
programming languages. They will have written non-trivial programs
in two languages that differ significantly from the departmental standard
(now C++). Students will also be proficient in the use of mechanisms
for describing the syntax and semantics of programming languages.
Course Topics:
-
Overview of programming language design concerns
-
History of programming language evolution
-
Formal methods of language syntax and semantics description
-
BNF notation
-
Attribute Grammars
-
Lisp
-
Functional languages
-
Variables
-
Scope
-
Lifetime
-
Bindings
-
Type-checking
-
Data types
-
Intrinsics
-
Arrays & vectors
-
Association lists
-
Unions and enums
-
User-defined structures/records
-
Expressions
-
Short-circuit evaluation
-
Delayed evaluation
-
Coercion
-
Flow-of-control
-
Selection statements (if-then-else, etc.)
-
Iteration statements
-
Meta-statements
-
GOTOs
-
Procedures, Functions & Subprograms
-
Local environments
-
Parameter passing (functions as parameters)
-
Overloading and polymorphism
-
Templates
-
Accessing non-local environments
-
Threads and co-routines
-
Java
-
Threaded languages
-
Concurrency
-
Message passing
-
Exception Handling
-
Throws & catches
Course Calendar:
Due dates for projects are underlined.
Exam dates are in bold.
Date |
Text |
Projects due |
1/5, 1/8 |
Introduction |
|
1/10,
1/12, 1/14 |
Ch 1,2,3 |
|
9/17, 1/19,1/21 |
Ch 3 |
HW#1 |
1/24, 1/26, 1/28 |
LISP (Ch 14) |
|
1/31, 2/2, 2/4 |
|
Proj #0.1 (Lisp) |
2/7, 2/9, 2/11 |
Ch 4 |
Proj#1 (Lisp) |
2/14, 2/16, 2/18 |
Ch 5 |
HW #2 |
2/21, 2/23,
2/25 |
Ch 6 |
Midterm Exam |
Spring Break |
|
|
3/6, 3/8, 3/10 |
Ch 7 |
Project #2 (Lisp) |
3/13, 3/15, 3/17 |
Ch 8 |
HW #3 |
3/20, 3/22, 3/24 |
Java |
Proj #0.2(Java) |
3/27, 3/29, 3/31 |
Ch 20 |
|
4/3, 4/5, 4/7 |
Ch 21 |
Project #3 (Java) |
4/10, 4/12, 4/14 |
Ch 15 |
|
4/17, 4/19 |
Ch 11 |
|
4/26 11:00-12:30 |
Final Exam |
Final Exam |
Grading Policy:
The final course grade will be a weighted average of the grades received
in each of the following categories, as specified: Small projects &
homeworks 15%, Projects 40%, Midterm exam 20%,
Final exam
25%.
Tardiness Policy: Programming and other homework assignments
will be due at the beginning of class. After that, assignments will
be accepted through the start of the next scheduled class, but will suffer
a full grade penalty. E.g., if a late programming assignment is worthy
of an 'A', I will mark it a 'B'. Assignments more than one class late will
not be accepted, and will receive a grade of 'F'.
Attendance Policy: We're all grown-ups, when and whether you
attend class is up to you. However, missed assignments, and exams shall
only be excused by a doctor's written note, verifying that the student
was medically indisposed to attend class that day. The first missed quiz
(for any reason) will be treated as the "lowest graded quiz", and therefore
dropped from the averaging calculation. Any additional missed quizzes must
be excused by a doctor's note.
Grading of Programs: Grading of programming assignments will
reflect three factors, weighted as shown.
-
(70%) Correctness -- does the program run correctly.
-
(15%) Style -- does the code adhere to class documentation standards? Is
the code indented properly? Are the variable names mneumonic? How well
has the student followed the basic formatting characteristics for the language?
-
(15%) Design -- is the program adequately decomposed (i.e., are the functions
and procedures small enough to be comprehensible)? Are the class and structure
definitions well chosen? How well has the student taken advantage of the
language's capabilities?
Announcements and the Web Page:
Students should view the course web page regularly for announcements regarding
programming assignments, readings, etc. I update course web pages frequently!
Cheating policy:
Students are required to attend to the policy on academic irregularity
outlined in the EMU student handbook. In addition, collaboration among
students in solving programming and homework assignments is forbidden.
If I receive programs or homework assignments that are substantially equivalent,
or which are not the original work of the student submitting the material,
I will not hesitate to punish all involved parties to the fullest extent,
up to and including assignment of a failing grade for the course, and referral
to the Office of Judicial Student Services for possible punitive action
at the University level, which may include expulsion from the University.
In addition, the University and the computer science department maintain
policies regarding proper behavior on its computer systems. Failure to
adhere to these policies can result in loss of computer privileges, and
possible legal action.