Compilerbauhome Compilerbau & Formale Sprachen: FIRST- und FOLLOW-Mengen Prof. Dr. Uwe Schmidt FH Wedel

FIRST- und FOLLOW-Mengen

weiter

weiter

Definitionen

FIRST(w)
gegeben: w ∈ (N ∪ T)*
 
FIRST(w) = { z ∈ T | w |—* zw1, w1 ∈ (N ∪ T)* }
Beispiel
arithmetische Ausdrücke:
 
w= T*F
 
FIRST(T*F) = {id, num, (}
weiter
Problem
X ::= w1
X ::= w2

FIRST(w1) ∩ FIRST(w2) ≠ {}
merke
Für Eingabezeichen aus der Schnittmenge ist nicht entscheidbar, welche Regel angewendet werden soll.
weiter
merke
Grammatik nicht mit rekursivem Abstieg analysierbar.
weiter
Berechnung
von FIRST und FOLLOW
einfach aber unvollständig
w = XYZ :
 
FIRST(w) = FIRST(X)
weiter
Problem
X kann auf ε ableitbar sein
 
w = XYZ, X |—* ε :
 
FIRST(w) = FIRST(X) ∪ FIRST(YZ)
weiter
Problem
X und Y können auf ε ableitbar sein
 
w = XYZ, X |—* ε, Y |—* ε :
 
FIRST(w) = FIRST(X) ∪ FIRST(Y) ∪ FIRST(Z)
weiter
merke
Alle auf ε ableitbaren Nichtterminalsymbole müssen bekannt sein und berücksichtigt werden
weiter
nullable(X)
Prädikat
 
X ∈ (N ∪ T)
 
nullable(X) := X |—* ε
weiter
2.Problem
Wann werden ε-Produktionen angewendet?
 
X ::= w1
X ::= ε
FOLLOW(X)
die Menge aller Terminalsymbole, die in einer Satzform auf X folgen können
 
FOLLOW(X) = { z ∈ T | S |—* aXzb, a,b ∈ (N ∪ T)* }
Problem
X ::= w1
X ::= ε
 
FIRST(w1) ∩ FOLLOW(X) ≠ {}
merke
Für Eingabezeichen aus der Schnittmenge ist nicht entscheidbar, ob die ε-Produktion oder die andere Produktion angewendet werden soll.
weiter
merke
Grammatik nicht mit rekursivem Abstieg analysierbar.
Berechnung
von FIRST, FOLLOW und nullable: Berechnung des kleinsten Fixpunktes einer Funktion
Definition
Ein Punkt
x ∈ D
ist ein Fixpunkt einer Funktion
f : D -> D
wenn gilt:
x = f x
nullable
f : N ∪ T -> N ∪ T
f ns = ns
          ∪ { X | X ::= Y1...Yn ∈ P,
                     ∀ 1 ≤ i ≤ n ⋅ i ∈ ns }
Berechnung
von FIRST, FOLLOW und nullable: iterativ
weiter

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