Compilerbauhome Compilerbau: LL(1) Grammatiken Prof. Dr. Uwe Schmidt FH Wedel

LL(1) Grammatiken

weiter

weiter

Parser-Tabelle

Definition
Eine Parser-Tabelle ist eine Matrix.
 
Die Spalten sind mit den Terminalsymbolen markiert.
 
Die Zeilen sind mit den Nichtterminalsymbolen markiert.
 
Jede Zelle enthält eine (möglicherweise leere) Menge von Produktionen.
Einträge
Für jedes Paar (X, z) mit X ∈ N, z ∈ T werden Einträge (Grammatik-Regeln) in der Parser-Tabelle nach folgenden zwei Verfahren berechnet
weiter
1.
X ::= w ∈ ParserTabelle(X, z)

für alle z ∈ FIRST(w)

weiter
2.
X ::= w ∈ ParserTabelle(X, z)

mit nullable(w)

für alle z ∈ FOLLOW(X)

Beispiel

weiter
gut
Genau eine Regel ∈ ParserTabelle(X,z): Ableitungsschritt mit dieser Regel
weiter
gut
Keine Regel ∈ ParserTabelle(X,z): Syntaxfehler
weiter
schlecht
Mehrere Regeln ∈ ParserTabelle(X,z): Kein LL-Parsen möglich
weiter
Definition
Grammatiken, die keine mehrfachen Einträge in der Parser-Tabelle enthalten, heißen LL(1)-Grammatiken
weiter
L.(.)
Von links nach rechts lesen
.L(.)
Linksableitung konstruieren
..(1)
Ein Zeichen vorausschauen
weiter
gut
Aus einer Parser-Tabelle kann auf einfache und systematische Weise ein Parser mit rekursivem Abstieg automatisch generiert werden.
?
Welche Grammatik-Regeln zerstören die LL(1) Eigenschaft?
weiter
Mehrdeutigkeiten
Mehrdeutige Grammatiken sind nie LL(1) Grammatiken.
weiter
Linksrekursion
Beispiel:
 
E ::= E + T
E ::= T
 
FIRST(T) ⊆ FIRST(E+T)
 
merke
Für LL-Parser nur Rechtsrekursion verwenden
weiter
Transformation
Linksrekursive Regeln in rechtsrekursive Regeln
 
Beispiel:
 
E  ::= T E'
E::= + T E'
E::=
weiter
merke
Anderer Syntaxbaum: Andere Semantik
weiter
Transformations-
Schema
Linksrekursive Regeln in rechtsrekursive Regeln
 
X  ::= X w1
X  ::= X w2
X  ::= u1
X  ::= u2
 
wird transformiert in
 
X  ::= u1 X'
X  ::= u2 X'
 
X::= w1 X'
X::= w2 X'
X::=
weiter
merke
Es entstehen Epsilon-Produktionen
weiter
gemeinsame Anfangsstücke
in Regeln für ein NT-Symbol
 
X  ::= Y w1
X  ::= Y w2
weiter
merke
FIRST-Mengen für beide Regeln gleich
weiter
Faktorisierung
eliminiert diese Eigenschaft
 
X  ::= Y X'
 
X::= w1
X::= w2
weiter
if-then und if-then-else
weiter
zur Berechnung der FIRST- und FOLLOW-Mengen, der LL(1)-Parsertabellen und der Konstruktion von Linksableitungen und Syntaxbäumen.

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