Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
90 changes: 35 additions & 55 deletions lecture/01-lexing/regular1.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,18 @@ title: Reguläre Sprachen, Ausdrucksstärke (Teil 1)

# Motivation


## Was muss ein Compiler wohl als erstes tun?

::: notes
Hier entsteht ein Tafelbild.
:::

## Themen für heute

- Lexer
- Endliche Automaten
- Reguläre Sprachen
- Lexer


# Endliche Automaten

Expand All @@ -39,19 +40,31 @@ $\vert w \vert$ eines Wortes $w$ ist die Anzahl von Buchstaben, die es enthält
Wörtern über diesem Alphabet. Sprachen können endlich oder unendlich viele Wörter
enthalten.

## Beispiel

## State machine

::: notes
Hier entsteht ein Tafelbild.
:::


## Deterministische endliche Automaten

Bestimmte State machines:

- Eingaben bestimmen Zustandsübergänge

- Zustandsübergänge sind eindeutig

- Es gibt Anfang(szustand) und End(zuständ)e

## Wie definieren wir das formal?

::: notes
Hier entsteht ein Tafelbild.
:::

## Def.: deterministischer endlicher Automat
## Def.: Deterministischer endlicher Automat

**Def.:** Ein **deterministischer endlicher Automat** (DFA) ist ein 5-Tupel
$A = (Q, \Sigma, \delta, q_0, F)$ mit
Expand All @@ -67,7 +80,15 @@ $A = (Q, \Sigma, \delta, q_0, F)$ mit

- $F \subseteq Q$ : die Menge der **Endzustände**

## Die Übergangsfunktion

## Beispiel

::: notes
Hier entsteht ein Tafelbild.
:::


## Eingabewörter statt Buchstaben

**Def.:** Wir definieren $\delta^{\ast}: (Q \times \Sigma^{\ast}) \rightarrow Q$:
induktiv wie folgt:
Expand All @@ -88,6 +109,12 @@ Hier entsteht ein Tafelbild.

## Nichtdeterministische endliche Automaten

::: notes
Hier entsteht ein Tafelbild.
:::

## Def.: Nichtdeterministischer Automat

**Def.:** Ein **nichtdeterministischer endlicher Automat** (NFA) ist ein 5-Tupel
$A = (Q, \Sigma, \delta, q_0, F)$ mit

Expand Down Expand Up @@ -236,61 +263,12 @@ den folgenden Einschränkungen:
Hier entsteht ein Tafelbild.
:::

## Reguläre Sprachen und ihre Grenzen
## Reguläre Sprachen

**Satz:** Die von endlichen Automaten akzeptiert Sprachklasse, die von regulären
Ausdrücken beschriebene Sprachklasse und die von regulären Grammatiken erzeugte
Sprachklasse sind identisch und heißen **reguläre Sprachen**.

\medskip

**Reguläre Sprachen**

- einfache Struktur
- Matchen von Symbolen (z. B. Klammern) nicht möglich, da die fixe Anzahl von
Zuständen eines DFAs die Erkennung solcher Sprachen verhindert.

## Wozu reguläre Sprachen im Compilerbau?

- Reguläre Ausdrücke

- definieren Schlüsselwörter und alle weiteren Symbole einer
Programmiersprache, z. B. den Aufbau von Gleitkommazahlen
- werden (oft von einem Generator) in DFAs umgewandelt
- sind die Basis des *Scanners* oder *Lexers*

# Lexer

## Ein Lexer ist mehr als ein DFA

- Ein **Lexer**

- wandelt mittels DFAs aus regulären Ausdrücken die Folge von Zeichen der
Quelldatei in eine Folge von sog. Token um

- bekommt als Input eine Liste von Paaren aus regulären Ausdrücken und
Tokennamen, z. B. ("while", WHILE)

- Kommentare und Strings müssen richtig erkannt werden. (Schachtelungen)

- liefert Paare von Token und deren Werte, sofern benötigt, z. B. (WHILE, \_),
oder (IDENTIFIER, "radius") oder (INTEGERZAHL, "334")

## Wie geht es weiter?

- Ein **Parser**

- führt mit Hilfe des Tokenstreams vom Lexer die Syntaxanalyse durch

- basiert auf einer sog. kontextfreien Grammatik, deren Terminale die Token
sind

- liefert die syntaktische Struktur in Form eines Ableitungsbaums (**syntax
tree**, **parse tree**), bzw. einen **AST** (abstract syntax tree) ohne
redundante Informationen im Ableitungsbaum (z. B. Semikolons)

- liefert evtl. Fehlermeldungen

# Wrap-Up

## Wrap-Up
Expand Down Expand Up @@ -318,3 +296,5 @@ Sprachklasse sind identisch und heißen **reguläre Sprachen**.
- k3: Ich kann einen DFA entwickeln, der alle Schlüsselwörter, Namen und weitere
Symbole einer Programmiersprache akzeptiert
:::


Loading