archetype | title | author | readings | outcomes | attachments | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
lecture-bc |
CFG |
BC George (HSBI) |
|
|
|
- Wie sind DFAs und NFAs definiert?
- Was sind reguläre Ausdrücke?
- Was sind formale und reguläre Grammatiken?
- In welchem Zusammenhang stehen all diese Begriffe?
- Wie werden DFAs und reguläre Ausdrücke im Compilerbau eingesetzt?
Für z. B. alle Sprachen, in deren Wörtern Zeichen über eine Konstante hinaus gezählt werden müssen. Diese Sprachen lassen sich oft mit Variablen im Exponenten beschreiben, die unendlich viele Werte annehmen können.
-
$a^ib^{2*i}$ ist nicht regulär -
$a^ib^{2*i}$ für$0 \leq i \leq 3$ ist regulär -
Wo finden sich die oben genannten VAriablen bei einem DFA wieder?
-
Warum ist die erste Sprache oben nicht regulär, die zweite aber?
- PDAs: mächtiger als DFAs, NFAs
- kontextfreie Grammatiken und Sprachen: mächtiger als reguläre Grammatiken und Sprachen
- DPDAs und deterministisch kontextfreie Grammatiken: die Grundlage der Syntaxanalyse im Compilerbau
Einordnung: Erweiterung der Automatenklasse DFA um einen Stack
\medskip
Def.: Ein Kellerautomat (PDA)
\medskip
Ein PDA ist per Definition nichtdeterministisch und kann spontane Zustandsübergänge durchführen.
Strukturen mit paarweise zu matchenden Symbolen.
Bei jedem Zustandsübergang wird ein Zeichen (oder
Soll das automatisch vom Stack genommene Symbol auf dem Stack bleiben, muss es wieder gepusht werden.
Ein PDA für
Def. Ein PDA
-
$\delta(q, a, X)$ hat höchstens ein Element für jedes$q \in Q, a \in\Sigma$ oder$(a = \epsilon$ und$X \in \Gamma)$ . - Wenn
$\delta (q, a, x)$ nicht leer ist für ein$a \in \Sigma$ , dann muss$\delta (q, \epsilon, x)$ leer sein.
Deterministische PDAs werden auch DPDAs genannt.
Satz: Die von DPDAs akzeptierten Sprachen sind eine echte Teilmenge der von PDAs akzeptierten Sprachen.
Reguläre Sprachen sind eine echte Teilmenge der von DPDAs akzeptierten Sprachen.
Def. Eine kontextfreie (cf-) Grammatik ist ein 4-Tupel
Def.: Gibt es in einer von einer kontextfreien Grammatik erzeugten Sprache ein Wort, für das mehr als ein Ableitungsbaum existiert, so heißt diese Grammatik mehrdeutig. Anderenfalls heißt sie eindeutig.
Satz: Es ist nicht entscheidbar, ob eine gegebene kontextfreie Grammatik eindeutig ist.
Satz: Es gibt kontextfreie Sprachen, für die keine eindeutige Grammatik existiert.
Satz: Die kontextfreien Sprachen und die Sprachen, die von PDAs akzeptiert werden, sind dieselbe Sprachklasse.
Satz: Eine von einem DPDA akzeptierte Sprache hat eine eindeutige Grammatik.
Def.: Die Klasse der Sprachen, die von einem DPDA akzeptiert werden, heißt Klasse der deterministisch kontextfreien (oder LR(k)-) Sprachen.
Vorgehensweise im Compilerbau: Eine Grammatik für die gewünschte Sprache definieren und schauen, ob sich daraus ein DPDA generieren lässt (automatisch).
- Die Struktur von gängigen Programmiersprachen lässt sich nicht mit regulären Ausdrücken beschreiben und damit nicht mit DFAs akzeptieren.
- Das Automatenmodell der DFAs wird um einen endlosen Stack erweitert, das ergibt PDAs.
- Kontextfreie Grammatiken (CFGs) erweitern die regulären Grammatiken.
- Deterministisch parsebare Sprachen haben eine eindeutige kontextfreie Grammatik.
- Es ist nicht entscheidbar, ob eine gegebene kontextfreie Grammatik eindeutig ist.
- Von DPDAs akzeptierte Sprachen haben eindeutige Grammatiken.
::: slides
Unless otherwise noted, this work is licensed under CC BY-SA 4.0. :::