4. Das Wortproblem
4.1 Die Existenz von Ableitungen eines Wortes
Beispiel 56 (Arithmetische Ausdr¨ ucke)
<expr> → <term>
<expr> → <expr>+<term>
<term> → (<expr>)
<term> → <term>× <term>
<term> → a|b| . . . |z
Aufgabe einesParsers ist nun, zu pr¨ufen, ob eine gegebene
Zeichenreihe einen g¨ultigen arithmetischen Ausdruck darstellt und, falls ja, ihn in seine Bestandteile zu zerlegen.
SeiG= (V,Σ, P, S) eine Grammatik.
Definition 57
1 Wortproblem: Gegeben ein Wort w∈Σ∗, stelle fest, ob w∈L(G) ?
2 Ableitungsproblem: Gegeben ein Wortw ∈L(G), gib eine Ableitung S→∗Gw an, d.h. eine Folge
S=w(0)→Gw(1)→G· · · →Gw(n)=w
mit w(i)∈(Σ∪V)∗ f¨uri= 1, . . . , n.
3 uniformes Wortproblem: Wortproblem, bei dem jede Probleminstanz sowohl die Grammatik G wie auch die zu testende Zeichenreihe w enth¨alt. IstG dagegenglobal
festgelegt, spricht man von einem nicht-uniformenWortproblem.
Bemerkung:
Das uniforme wie auch das nicht-uniforme Wortproblem ist f¨ur Typ-0-Sprachen (also die rekursiv-aufz¨ahlbare Sprachen) nicht entscheidbar. Wir werden sp¨ater sehen, dass es zumHalteproblem f¨ur Turingmaschinen¨aquivalent ist.
Es gilt jedoch
Satz 58
F¨ur kontextsensitive Grammatiken ist das Wortproblem entscheidbar.
Genauer: Es gibt einen Algorithmus, der bei Eingabe einer
kontextsensitiven GrammatikG= (V,Σ, P, S)und eines Wortes w in endlicher Zeit entscheidet, obw∈L(G).
Beweisidee:
Angenommenw∈L(G). Dann gibt es eine Ableitung S=w(0)→Gw(1)→G· · · →Gw(n)=w mitw(i)∈(Σ∪V)∗ f¨ur i= 1, . . . , n.
Da aberGkontextsensitiv ist, gilt (fallsw6=)
|w(0)| ≤ |w(1)| ≤ · · · ≤ |w(n)|,
d.h., es gen¨ugt, alle W¨orter in (Σ∪V)∗ der L¨ange≤ |w|zu erzeugen.
Beweis:
Sei o.B.d.A.w6=und sei
Tmn := {w0∈(Σ∪V)∗; |w0| ≤nund
w0 l¨asst sich ausS in ≤mSchritten ableiten}
Diese Mengen kann man f¨ur alle n undm induktiv wie folgt berechnen:
T0n := {S}
Tm+1n := Tmn ∪ {w0 ∈(Σ∪V)∗; |w0| ≤nund w00→w0 f¨ur einw00∈Tmn} Beachte:F¨ur alle m gilt: |Tmn| ≤Pn
i=1|Σ∪V|i. Es muss daher immer einm0 geben mit
Tmn0 =Tmn0+1=. . .=:Tn.
Beweis (Forts.):
Algorithmus:
n:=|w|
T :={S}
T0 :=∅
while T 6=T0 do T0 :=T
T :=T0∪ {w0 ∈(V ∪Σ)+; |w0| ≤n,(∃w00∈T0)[w00 →w0]}
od
if w∈T return
”ja“ else return
”nein“ fi
Beispiel 59
Gegeben sei die Typ-2-Grammatik mit den Produktionen S →abund S→aSb
sowie das Wortw=abab.
T04 = {S}
T14 = {S, ab, aSb}
T24 = {S, ab, aSb, aabb} aaSbb ist zu lang!
T34 = {S, ab, aSb, aabb}
Also l¨asst sich das Wort w mit der gegebenen Grammatiknicht erzeugen!
Bemerkung:
Der angegebene Algorithmus ist nicht sehr effizient! F¨ur
kontextfreieGrammatiken gibt es wesentlich effizientere Verfahren, die wir sp¨ater kennenlernen werden!