Skip to content

Commit 073d64d

Browse files
bcg7bcg7cagix
authored
regular1.md splitted into regular1.md and regular2.md (#383)
Co-authored-by: bcg7 <bc.george@hsbi.de> Co-authored-by: Carsten Gips <cagix@hsbi.de>
1 parent 6717d64 commit 073d64d

File tree

2 files changed

+80
-305
lines changed

2 files changed

+80
-305
lines changed

lecture/01-lexing/regular1.md

Lines changed: 35 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,18 @@ title: Reguläre Sprachen, Ausdrucksstärke (Teil 1)
1111

1212
# Motivation
1313

14+
1415
## Was muss ein Compiler wohl als erstes tun?
1516

1617
::: notes
1718
Hier entsteht ein Tafelbild.
1819
:::
19-
2020
## Themen für heute
2121

22+
- Lexer
2223
- Endliche Automaten
2324
- Reguläre Sprachen
24-
- Lexer
25+
2526

2627
# Endliche Automaten
2728

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

42-
## Beispiel
43+
44+
## State machine
4345

4446
::: notes
4547
Hier entsteht ein Tafelbild.
4648
:::
4749

50+
4851
## Deterministische endliche Automaten
4952

53+
Bestimmte State machines:
54+
55+
- Eingaben bestimmen Zustandsübergänge
56+
57+
- Zustandsübergänge sind eindeutig
58+
59+
- Es gibt Anfang(szustand) und End(zuständ)e
60+
61+
## Wie definieren wir das formal?
62+
5063
::: notes
5164
Hier entsteht ein Tafelbild.
5265
:::
5366

54-
## Def.: deterministischer endlicher Automat
67+
## Def.: Deterministischer endlicher Automat
5568

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

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

70-
## Die Übergangsfunktion
83+
84+
## Beispiel
85+
86+
::: notes
87+
Hier entsteht ein Tafelbild.
88+
:::
89+
90+
91+
## Eingabewörter statt Buchstaben
7192

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

89110
## Nichtdeterministische endliche Automaten
90111

112+
::: notes
113+
Hier entsteht ein Tafelbild.
114+
:::
115+
116+
## Def.: Nichtdeterministischer Automat
117+
91118
**Def.:** Ein **nichtdeterministischer endlicher Automat** (NFA) ist ein 5-Tupel
92119
$A = (Q, \Sigma, \delta, q_0, F)$ mit
93120

@@ -236,61 +263,12 @@ den folgenden Einschränkungen:
236263
Hier entsteht ein Tafelbild.
237264
:::
238265

239-
## Reguläre Sprachen und ihre Grenzen
266+
## Reguläre Sprachen
240267

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

245-
\medskip
246-
247-
**Reguläre Sprachen**
248-
249-
- einfache Struktur
250-
- Matchen von Symbolen (z. B. Klammern) nicht möglich, da die fixe Anzahl von
251-
Zuständen eines DFAs die Erkennung solcher Sprachen verhindert.
252-
253-
## Wozu reguläre Sprachen im Compilerbau?
254-
255-
- Reguläre Ausdrücke
256-
257-
- definieren Schlüsselwörter und alle weiteren Symbole einer
258-
Programmiersprache, z. B. den Aufbau von Gleitkommazahlen
259-
- werden (oft von einem Generator) in DFAs umgewandelt
260-
- sind die Basis des *Scanners* oder *Lexers*
261-
262-
# Lexer
263-
264-
## Ein Lexer ist mehr als ein DFA
265-
266-
- Ein **Lexer**
267-
268-
- wandelt mittels DFAs aus regulären Ausdrücken die Folge von Zeichen der
269-
Quelldatei in eine Folge von sog. Token um
270-
271-
- bekommt als Input eine Liste von Paaren aus regulären Ausdrücken und
272-
Tokennamen, z. B. ("while", WHILE)
273-
274-
- Kommentare und Strings müssen richtig erkannt werden. (Schachtelungen)
275-
276-
- liefert Paare von Token und deren Werte, sofern benötigt, z. B. (WHILE, \_),
277-
oder (IDENTIFIER, "radius") oder (INTEGERZAHL, "334")
278-
279-
## Wie geht es weiter?
280-
281-
- Ein **Parser**
282-
283-
- führt mit Hilfe des Tokenstreams vom Lexer die Syntaxanalyse durch
284-
285-
- basiert auf einer sog. kontextfreien Grammatik, deren Terminale die Token
286-
sind
287-
288-
- liefert die syntaktische Struktur in Form eines Ableitungsbaums (**syntax
289-
tree**, **parse tree**), bzw. einen **AST** (abstract syntax tree) ohne
290-
redundante Informationen im Ableitungsbaum (z. B. Semikolons)
291-
292-
- liefert evtl. Fehlermeldungen
293-
294272
# Wrap-Up
295273

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

0 commit comments

Comments
 (0)