This page gives highlights of past lectures and provides lecture notes, reading assignments, and exercises.
Chapters, sections and exercises in readings are from the main textbook, unless specified otherwise.
Readings on F# link directly to online resources, such as examples or the Wikibook on F# Programming.
Dates | Topics | Exercises |
---|---|---|
Aug 23 Aug 25 |
Course introduction and administration.
Overview of course topics.
Programming language paradigms.
Brief history of programming languages.
Compilation vs. intepretation.
Issues and factors in programming language design.
|
|
Aug 30 |
An introduction to F#.
Basic types and operators.
Basic expressions and type checking.
Variable binding. Variable scope ands scoping rules.
Function definitions.
Tuple types.
|
|
Sep 1 |
More on F#.
Pattern matching.
Patterns in let expressions and in function definitions.
The match construct. Meaning and common uses.
Scoping of pattern variables in match.
|
|
Sep 6 |
Algebraic datatypes (ADT), or discriminated unions, in F#.
Basic uses.
Pattern matching with ADTs.
Functions accessing and manipulating ADTs.
Using ADTs to encode arithmetic expressions.
Simple evaluators of arithmetic expressions.
|
|
Sep 8 |
Parametric types in F#. Motivation and uses.
Parametric algebraic datatypes.
F# Lists. Basic features and examples.
Using pattern matching and recursion to implement functions over lists.
|
|
Sep 13 |
No class |
|
Sep 15 |
Implementing finite sets in F# using lists.
Extending the basic expression language with variables
and with let binders.
Free and bound variables, variable scope.
Evaluating expressions with let binders.
Examples.
|
All ex. in code 5 |
Sep 20 Sep 22 |
Compiling expressions with variable names to expressions with variable indices.
Stack machines for expression evaluation, with variables and without.
Compiling expressions to stack machine code.
Running stack machine code.
Implementing an abstract machine in Java.
Examples.
|
All ex. in code 6 |
Sep 27 |
Formal languages.
Regular expressions. Languages generated by regular expressions.
Finite Automata.
Finite automata as recognizers of regular languages.
Lecture notes by Wayne Goddard on |
Practice problems in today's readings |
Sep 29 |
Non-deterministic finite-state automata (NFAs).
Definition and examples.
Relationships between NFAs, deterministic automata and regular expressions.
Context-free grammars and languages.
Definition and examples.
|
Practice problems in today's readings |
Oct 4 |
Midterm I |
|
Oct 6 |
More on context-free grammars and languages.
Systematically generating CFG's from regular expressions.
Derivations and derivation trees.
Ambiguous grammars.
Examples and exercises.
Pushdown automata.
Recognizing context-free languages with pushdown automata.
Examples.
Lecture notes on
|
Practice problems in today's readings |
Oct 11 |
More on derivations and derivation trees.
From concrete to abstract syntax.
Lexers, parsers and generators.
Specifying lexers and parsers in F# with fslex and fsyacc.
A concrete syntax and a lexer and parser for a simple language of expressions.
Lecture notes on
|
|
Oct 13 |
More on automatically generated parsers.
Example of pushdown automaton parser generated by fsyacc.
|
|
Oct 18 Oct 20 |
Examples of micro-ML programs.
Interpreting micro-ML.
Specifying interpreters formally with evaluation rules.
Implementation of specification in F#, via eval function.
Static and dynamic scope.
Adding type-checking to micro-ML.
Formal type-checking rules.
Implementation of type checker.
Static vs. dynamic typing.
|
|
Oct 25 |
Higher-order functions in F#.
Currying and partial evaluation.
Higher-order combinators.
Examples.
|
|
Oct 27 |
Extending micro-ML to higher-order functions. Comparison between interpreters for first-order and higher-order micro-ML. Examples of higher-order programming in Micro-ML
Records in F#.
Mutable and immutable fields.
Mutable variables.
|
|
Nov 1 Nov 3 |
Imperative programming. Main concepts.
Programs as state transformers.
A naive imperative language.
Environment and Store.
The C programming language.
Integers, pointers and arrays in C.
Type declarations in C.
The micro-C language.
|
|
Nov 8 |
Additional F# features.
Alternative syntax for parametric types.
Immutable maps.
Option types and their uses.
Sequencing of expressions with the ; operator.
|
|
Nov 10 |
Parameter passing mechanisms in various programming languages.
|
|
Nov 15 |
Midterm II |
|
Nov 17 |
An virtual stack machine for micro-C.
Instruction set, concrete and symbolic.
Virtual machine as implemented in Java.
The structure of the runtime stack.
Compiling micro-C to machine code: overview
of main approach.
|
Exercises in lecture notes |
Nov 22 Nov 24 |
Thanksgiving break |
|
Nov 29 Dec 1 |
More on micro-C compilation.
Examples of compilation.
Compilation to real machine code.
|
|
Dec 6 |
Real-world virtual machines.
An overview of the Java virtual machine.
Main differences with CLI (.NET) virtual machine.
Byte code verification.
Just-in-time compilation.
|
|
Dec 8 |
Discussion of course project.
|
|