CSI 3120 A, Fall 2007: syllabus


(3 hours of lectures per week, 1.5 hours of labs per week, 3 credits).

Design and evaluation criteria for programming languages. Introduction to syntactic and semantic description of programming languages. Basics of programming language implementation. Scripting languages. A comparison of design choices across programming paradigms: data objects, data types, control structures, sub-programs. Basics of concurrency. Prerequisites: CSI2101, CSI2120.

Course objectives

Present the fundamental issues in the design and use of major programming languages. Present implementation concepts and designs. Introduce an important script language: Perl.  Prepare you for further study of programming languages, help develop an appreciation of a programming language as a tool for software construction, enable you to evaluate and choose a language to match the problem. 


Dr. Nathalie Japkowicz

Office: STE 5029
Phone: 562-5800 ext. 6693 (Note: it is safer to contact me by e-mail than by telephone)
Email: : nat@site.uottawa.ca

Office hours:

  • Monday, 2:45pm-3:45pm
  • Wednesday, 1:15pm-2:15pm

Feel free to send me questions by electronic mail. They will usually be answered the same day. If my office hours are not convenient for you, we could meet by appointment. Please contact me by e-mail for such an arrangement.

Textbook and handouts

Robert W. Sebesta, Concepts of Programming Languages, 8th ed., Addison-Wesley, 2007.

I recommend that you buy the book. You will enjoy many advantages! To begin with, you will get your personal code for accessing the Student Resources at the textbook's Web site.

Next, you will find in the textbook very interesting interviews with language designers: Alan Cooper (Mr. Visual Basic), Rasmus Lerdorf (Mr. PHP), Larry Wall (Mr. Perl), Professor Niklaus Wirth (Mr. Euler, Algol-W, Pascal, Modula, Oberon, and the recipient of ACM's Turing Award), Bjarne Stroustrup (Mr. C++), and James Gosling (Mr. Java).

The book covers new developments, including C#. There are history notes for the curious. There are programming exercises for those who want more practice. And in general the textbook is a really neat reference, worth keeping for later.

Class notes will be posted at the course Web site, on the Handouts page. We will discuss two topics in language description, and introduce three new languages. We will spend a good deal of time on topics that are usually troublesome for many students, and much less time on topics that people find easier. We will leave some topics as (mostly) reading assignments.

Additional handouts will appear, as needed, also on the Handouts page.

We will review two programming languages that you already know, and introduce a new language (a script language) : PERL. PERL is well described in the textbook, but there also are excellent descriptions on the Web. Here are a few pointers just to get you started.


Lectures and lab groups


Monday 5:30pm-8:20pm, MNT 204


Thursday 8:30am-10am, POR 105


LAB 1 Thursdays, 5:30pm-7pm, STE 2060

Marking scheme

A maximum of 100 marks will be available. The division is as follows:

[AS] assignments

35 marks

[MD] midterm exam (closed book, 80 minutes)

20 marks

[FN] final exam (closed book, 3 hours)

45 marks

Assignments, with tentative topics, are listed in more detail later in this document. All assignments will be posted at the course Web site. The marks will be most probably distributed like this: 8 + 9 + 9 + 9.

The midterm will be held on Thursday, October 25, 8:30am-10:00am in room STE J 0106.  Please plan well ahead to show up early enough to allow hassle-free seating.

You are expected to write the midterm. There will be no make-up. If you have a valid medical reason to have missed the midterm, confirmed by the official University health services, I will add the weight of the midterm to the final exam's weight.

The midterm will cover topics 1-6, plus Unix and some background knowledge, including Scheme and Prolog. (Topics are listed later in this document.)

The final exam will cover all topics, with a slight emphasis on topics 7-11.

You will be allowed a crib sheet at the midterm: one double-sided page, US Letter size (8.5 by 11 inches), hand-written only, and no magnifying glass. You will be allowed two such crib sheets at the final exam.

A policy of the School of Information Technology and Engineering requires you to pass the controlled evaluation component, that is to say, to achieve at least 50% of the available test and exam marks. The grade will be calculated according to the usual University of Ottawa and Faculty of Engineering scale (A+ for 90% and above, failure with a D or lower for less than 55%). The basis for the grade will be the adjusted total AT, computed from MD (midterm), FN (final) and AS (assignments), as follows:

if MD + FN < 32.5
then AT = (MD + FN ) * 1.5
else AT = MD + FN + AS;

Assignments -- details

Tentative topic

Posted - due

Preliminaries; History; Prolog; Scheme,Unix
[topics 1-3, 8 marks, individual]

Sep. 17 -   Oct. 1

Grammars; Axiomatic semantics; Syntactic Analysis
[topics 4-6, 9 marks, individual]

Oct. 1 -      Oct. 29

[topic 7, 9 marks, individual]

Nov. 5 -    Nov. 19

Design issues
[topics 8-11, 9 marks, individual]

Nov. 19 Dec. 3

Assignments 2 and 4 will be written. Assignment 3 will be a strictly programming assignment; Assignment 1 will be a mixture of the two. The method of handing in your code will be determined, and announced, later.

Late hand-in will be accepted for several days after the due date; when I post the official solution of an assignment, no late submissions will be possible. The late penalty is 0.5 mark a day for weekdays and 0.25 mark a day for weekends and holidays. (That's 0.5% or 0.25% of your grade, since every mark equals 1% of the overall grade.)

If you disagree with an assignment mark, please take it up with your TA. Appeals will be only considered no later than two weeks after the mark has been handed out. You can take the matter to me if you disagree with the TA's additional explanations.

Topics and reading


You are expected to read the indicated chapters or their sections right after the material has been discussed -- or assigned for home reading -- in class. Feel free to be slightly ahead of lectures (:>). There will be richer class notes for a few topics that are not covered well in the textbook.

Please note that this course is not devoted to programming, or to data structures, or to programming languages you already know (Java, C++ , Scheme and Prolog). Those are the prerequisites -- especially Scheme and Prolog! One of the purposes of the course is to show you a new way of thinking about the material that you have already encountered, and to achieve a synthesis of that prerequisite knowledge. Topics 8-11, in particular, are in this category.

We will, naturally, introduce a good deal of material that is new, or at least new to a majority of the class. Those are topics 2-7 and parts of topic 1. The teaching of this material will be substantially assisted by labs. Also, since most of you are new to Unix/Linux, and we will need some knowledge of this splendid operating system, there will be two labs on Unix. Note that Unix will not be discussed in lectures.

In any event, attendance at labs and tutorials is mandatory, just as you are expected to attend the lectures.

Topic list

We begin with an overview of the course and a review of the assumed background knowledge (please, read chapter 15 and 16 to refresh your Scheme and Prolog skills).

  1. Criteria, classification, applications
    (chapter 1).
  2. Scheme and Prolog review                                                            (chapters 15 and 16)
  3. Evolution of the major programming languages
    (chapter 2, mostly a reading assignment).
  4. Describing the syntax of programming languages
    (sections 3.1-3.3).
  5. Describing the semantics of programming languages
    (section 3.5.2).
  6. Syntactic Analysis ; Parsing
    (chapter 4 (though section 4.2 will only be surveyed))
  7. An introduction to Perl
    (handouts, and lots of stuff on the Web, starting with the principal Perl site).
  8. Names, bindings, type checking, scopes, Data types, Expressions and the assignment statement , Statement-level control structures
    (chapter 5, 6, 7 and 8 ).
  9. Implementing subprograms
    (sections 10.1-10.4).
  10. Concurrency                                                                                   (sections 13.1-5, 13.7)
  11. Exception Handling                                                                         (sections 14.1, 14.3-14.6)

Plan of lectures





Sep. 10,                      Mon.

Preliminaries,       1, 2

Oct. 25, Thur.


Sep. 17,                       Mon.

3, 4                       [Assignt 1 Out]

Oct. 29,  Mon.

7, 8

Sep. 24,                      Mon.


Nov. 5,   Mon.

7                        [Assignt 2 In; Assignt 3 Out]

Oct. 1,                         Mon.

5                       [Assignt 1 In] [Assignt 2 Out]

Nov. 12, Mon.


Oct. 8,                        Mon.

Thanksgiving   No class

Nov. 19, Mon.

8, 9                         [Assignt 3 In]

[Assignment 4 Out]

Oct. 15,                 Mon.


Nov. 26, Mon.

9, 10


Oct. 22,                    Mon.

6, Review                          

Dec. 3,    Mon.

11, Review

[Assignment 4 In]


The drop date this semester is November 5.

Lab schedule

  1. Sep. 17: Introduction to Unix/Linux.
  2. Sep. 24: Introduction to Unix/Linux.
  3. Oct. 1: Grammars.
  4. Oct. 8: Axiomatic semantics.
  5. Oct. 15: Syntactic Analysis.
  6. Oct. 22: Syntactic Analysis.
  7. Oct. 29: Perl.
  8. Nov. 5: Perl.
  9. Mov. 12: Topic 8.
  10. Nov 19: Topics 8,9.
  11. Nov. 26: Topic  10.
  12. Dec. 3: Topic 11.


Avoid plagiarism...

Have a good look at our policy, please.

Good luck!



Updated on August 10, 2007