Compilerbauhome Compilerbau: Kontextfreie Grammatiken Prof. Dr. Uwe Schmidt FH Wedel

Kontextfreie Grammatiken

weiter

weiter

Definition
Kontextfreie Grammatik
weiter
4-Tupel
 
G = (T, N, P, S)
weiter
T
Terminalsymbole, nicht leere endliche Menge
weiter
N
Nichtterminalsymbole, nicht leere endliche Menge
weiter
merke
N ∩ T = {}
weiter
P
Regelmenge, Produktionen, nicht leer
weiter
Regel
X ::= Y1 Y2 ... Yn
 
mit
 
X ∈ N, Yi ∈ N ∪ T, n ≥ 0
weiter
S
Startsymbol
 
S ∈ N
weiter
Ableitungsschritt
gegeben
x ∈ (N ∪ T)*

p ::= q ∈ P

x = x1px2

weiter
Ableitungsschritt
p wird in x durch die rechte Seite q ersetzt
 
y = x1qx2
weiter
Notation
für einen Ableitungsschritt
 
x y
weiter
Ableitungsfolge
x0 x1 x2 ... xn
kurz
x0 * xn
weiter
Satzform
eine Zeichenreihe w ∈ (N ∪ T)* mit
 
S ⊢* w
weiter
Satz
eine Zeichenreihe w ∈ T* mit
 
S ⊢* w
weiter
Spache L(G)
L(G) = { w | w ∈ T* · S ⊢* w}
 
Alle aus dem Startsymbol erzeugbaren Wörter über T
weiter
Ableitungsbaum
Syntaxbaum
Eine Ableitungsfolge kann als Baum dargestellt werden
weiter
Die Reihenfolge der Ableitungsschritte innerhalb einer Satzform hat keinen Einfluss auf die grammatikalische Struktur eines Satzes
merke
Dieses gilt nicht mehr für kontextsenitive oder Typ-0-Grammatiken
weiter
Die ausgewählten Regeln sind entscheident
weiter
systematische Ableitungsstrategien
Linksableitung
im Baum (oder im Wort) wird immer das am weitesten links stehende (das erste) Nichtterminalsysmbol abgeleitet
weiter
Rechtssableitung
im Baum (oder im Wort) wird immer das am weitesten rechts stehende (das letzte) Nichtterminalsysmbol abgeleitet
weiter
Beispiel
G = (T, N, P, S)   mit
 
T = { i, +, *, (, ) }
 
N = { E }
 
P = { E ::= E + E      (1)
    , E ::= E * E      (2)
    , E ::= ( E )      (3)
    , E ::= i          (4)
    }
 
S = E
weiter
?
L(G) = { ... } ?
weiter
Kunst
bei der Konstruktion eines Ableitungsbaums:

Auswahl der richtigen Regeln

weiter
merke
Sonst: Sackgasse
weiter
Kunst
bei der Konstruktion eines Ableitungsbaums:

effiziente Auswahl der richtigen Regeln

weiter
merke
Sonst: Parser unbrauchbar
weiter
Ziel
parsen mit einer Zeitkomplexität von O(n)
weiter
schlecht
Für jede kontextfreie Sprache kann ein Wort in der Zeitkomplexität O(n3) erkannt werden.
weiter
Strategie
Die Eingabe von links nach rechts verarbeiten,
dabei den Baum schrittweise aufbauen
und bei der Auswahl der Regeln möglichst wenig in der Eingabe vorausschauen.
weiter

weiter

Mehrdeutige Grammatiken

Definition
Eine Grammatik ist mehrdeutig, wenn es zu (mindestens) einem Wort aus der Sprache zwei unterschiedliche Ableitungsbäume gibt.
weiter
Problem
Semantik wird mit Hilfe des Syntaxbaums definiert
weiter
schlecht
mehrere Syntaxbäume

==>

mehrere Bedeutungen

weiter
schlecht
mehrere Syntaxbäume

==>

kein deterministischer Parser

==>

ineffizient

weiter
Aufgabe
Zu einer Sprache L(G) mit einer mehrdeutigen Grammatik G eine Grammatik G' finden, so dass gilt:
 
L(G) = L(G')
weiter
schlecht
Diese ist nicht immer möglich.
schlecht
Ob eine Grammatik mehrdeutig ist, ist im Allgemeinen nicht entscheidbar.
weiter
Mehrdeutige Sprachen
Definition:

Eine Sprache L ist mehrdeutig, wenn für alle G mit L(G) = L gilt: G ist mehrdeutig.

weiter
gut
Assoziativitäten und Prioritäten von Operatoren werden festgelegt.
weiter
schlecht
Ableitungsbaum wird größer.
schlecht
Viele Knoten ohne Informationsgehalt.
weiter

Letzte Änderung: 05.12.2017
© Prof. Dr. Uwe Schmidt
Prof. Dr. Uwe Schmidt FH Wedel