COP 4555
Principles of Programming Languages

Spring 2005

Mondays and Wednesdays, 3:30 -- 4:45, ECS 145

Course Prerequisites



Course Outcomes

Upon successful completion of COP 4555, students will

  1. Master programming in a functional language, such as Standard ML.
  2. Master programming with recursion.
  3. Be familiar with the use of context-free grammars to specify programming language syntax and with recursive descent parsing.
  4. Be familiar with natural semantics for imperative and functional programming languages and their use in building interpreters.
  5. Be familiar with polymorphic type systems and type inference.
  6. Be familiar with issues in the design and implementation of programming languages, such as lexical versus dynamic scoping and static versus dynamic type checking.

Course Description

This course is a general introduction to the study of programming languages. Our goal is to understand how programming languages are put together, to gain a feel for some the of the tradeoffs involved in the design of a programming language. We will address basic issues in language implementation, such as syntax specification (using context-free grammars) and run-time organization.

We will study one language in detail: a very well-designed functional programming language called Standard ML. Programming in Standard ML involves a different approach to programming, based not on sequences of assignments to variables, but rather on recursion. One goal of this course is to help you to master programming with recursion; this skill will be valuable to you, whatever programming languages you use in the future.

The programming assignments in Standard ML can be done on the SPARC server in the JCCL; you can connect to weasel via Xwin32 or ssh. Alternatively, you can download Standard ML yourself from the Standard ML of New Jersey home page,

As the semester continues, we will explore programming language semantics and type systems in detail. We will deepen our understanding of these topics by programming a language interpreter and type checker in Standard ML.

The course lectures will not follow the textbook closely. I will, however, assign readings regularly which will serve to complement my lectures.

The course will be structured approximately as follows:

  1. Introduction
  2. Syntax
  3. Standard ML
  4. Type Systems
  5. Semantics
  6. Run-time organization
  7. Object-oriented languages

Homework Groups

I ask that you form groups of size two (or possibly one or three) for the purpose of submitting homeworks. You should first try to solve the homework problems on your own, and then you should meet with your partner(s) to discuss the solutions that you have found. Then the group should prepare a single write-up of the homework to submit for grading. Having homework groups makes my grading job more manageable, of course, but it also can help you to learn more: you and your partner(s) will often be able to catch one another's errors, and you will often find that your group is able to find cleaner and more elegant solutions than each of you found on your own.


Homework 25%
Midterm Exam 25%
Final Exam 45%
Class Participation5%
The final exam will be on Monday, April 25, from 3:30 to 6:15.

Academic Integrity

I expect you to maintain a high level of academic integrity in this course. Please read FIU's Code of Academic Integrity at For this course, the basic principle to follow is this: the work that you submit should be the result of your group's own effort. You are allowed to consult other books in solving homework problems, or to discuss the problems with other students, but you should cite any such sources that you use. And you must write up your solutions on your own--merely copying answers from the Web, books, or other students is definitely not acceptable.

Finally, I encourage you to make a serious effort to solve the problems on your own before you consult other books or other students. Struggling with different approaches to difficult problems will give you many insights that you won't get by simply reading a beautifully polished answer in a book. (Of course, after you've solved a problem on your own, it's then nice to look at other people's solutions to see how they compare with yours.)


I will grant incompletes only in extreme circumstances, such as medical emergencies.


I expect you to attend class regularly and promptly and to participate in discussions. Please don't be shy about asking questions--if something is unclear to you, it is probably unclear to others as well.

Back to COP 4555 home page.