Lecture Notes

The notes are rather sparse and only include definitions and the like (and maybe some worked, tedious exercises). They are a good summary for later reference but are by no means a substitute for the actual lectures and/or textbook.

  1. Introduction ( handout and overhead presentation) and Alphabets, strings, and languages ( handout and overhead presentation). Beside an overall introduction to the course these notes cover Chapter 7 of the textbook.

  2. State transition diagrams aka finite automata ( handout and overhead presentation). The relevant textbook material is Chapter 8 except Section 8.5 (we will discuss this kind of specification and verification later in a slightly more general context).

  3. Regular languages ( handout and overhead presentation), or regular expressions and state transition diagrams put together, plus generat properties of regular languages. The relevant textbook material is you guessed it, Chapter 9.

    As an example of using regular languages in practice the file scanner.l describes a complete lexical analyzer (or scanner) for a Java-like programming language. This is the input of Flex which generates C code that implements one big finite automaton (which in turn implements the actual lexical analysis). You will notice that the regular expressions that define the lexical structure of a programming language are not overly complicated, but on the other hand there are lots of them; the resulting finite automaton (that is used for the actual lexical analysis) is therefore quite large (several tens of states).

  4. Context-free languages ( handout and overhead presentation). This section covers Chapter 10 from the textbook.

Lecture Recording

Lectures are recorded as follows: