@@ -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
1718Hier 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
3940Wörtern über diesem Alphabet. Sprachen können endlich oder unendlich viele Wörter
4041enthalten.
4142
42- ## Beispiel
43+
44+ ## State machine
4345
4446::: notes
4547Hier 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
5164Hier 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$:
7394induktiv 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:
236263Hier 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
242269Ausdrücken beschriebene Sprachklasse und die von regulären Grammatiken erzeugte
243270Sprachklasse 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