Semantics of Programming Languages, spring 2001
The course Semantics of Programming Languages is given by Marcello Bonsangue. It serves
students of the third and fourth year of the school in computer
science at the University of
Leiden. It is a compulsory course for students who have chosen
the specialization in Theoretical Computer Science (in dutch:
afstudeerrichting Fundamentele Informatica).
This course is worth 4 study points. It is taught in English.
In the academic year 2000/2001, the course is
scheduled
in the second semester.
The lessons will be given on Monday afternoon (January 15,22,29;
February 5,12,19,26; March 5,12,19,26; and April 2,9,23), from 13:45
till 15.30, in room WI 403.
Objective:
A programming language can be interpreted on the basis of our
intuitive concept of computation. However, an informal and vague
interpretation of a programming language may cause inconsistency and
ambiguity. In this course we introduce the formal semantics of
programming languages, and the mathematical principles underlying it.
The formal semantics of a programming language assigns to every
program of the language a precise mathematical meaning. There are
different reasons why this is desirable: to give programmers
unambiguous and perhaps informative answers about the language in
order to write correct programs, to give implementers a precise
definition of the language, and to develop an abstract but intuitive
model of the language in order to reason about programs and to aid
program development from specifications.
The main objective of the course is the study the principles of formal
notation for describing computations, and tools for analyzing and
proving properties of computations. By the end of the course, the
students should understand the semantics of a simple abstract
programming languages, be able to prove simple equivalences between
programs using the formal semantics; and have an elementary grasp of
the mathematical principles underlying semantics.
Prerequisites:
Students should have followed the courses
Programmeren en correctheid
and
Concepten van programmeertalen.
Course Outline:
The course presents various classical kinds of semantics. For
historical reason the emphasis will be on formal notations for
abstractly specifying how programs compute (operational semantics), on
mathematical structures for describing what programs compute
(denotational semantics), and, to a lesser extend, also to programming
logic for reasoning about programs (axiomatic semantics).
The main differences between the semantics for imperative
(state-based, non-uniform), for schematic (abstract, uniform), and for
functional programs is described.
Grades:
Grading will be based on homeworks, a final examination, and (to a
lesser, more informal sense) on class participation.
Required Textbook:
|
The main text for this course is the book "The Formal Semantics of
Programming Languages: An Introduction", by Glynn Winskel, The MIT
Press, 1993 (ISBN 0-262-23169-7).
|
As supplementary text we may use the book "Control Flow Semantics", by
Jaco de Bakker and Erik de Vink, The MIT Press, 1996 (ISBN
0-262-04154-5). Students may also be asked to read material from other
sources that will be made available in class when needed.
Comments, remarks and suggestions can be sent to
Bonsangue Marcello
Last modified: Thu Aug 23 09:29:44 CEST 2001