Hallo.
Ich schlage mich gerade mit kontextfreien Sprachen herum. Genauer gesagt mit den Abschlusseigenschaften und den eigentlichen Verständnis
Dazu habe ich mir mal den Wikipedia Artikel durchgelesen
http://de.wikipedia.org/wiki/Kellerautomat
Dort ist ein Kellerautomat gegeben, ich schreibe ihn in der Form
d(zustand, gelesenes Zeichen, oberstes Stackelement) = (neuer Zustand, schreibe auf Stack etwas rauf)
Es ist der Kellerautomat für an bn
d(Z0,a,#) = (Z0, a#)
d(Z0,a,a) = (Z0, aa)
d(Z0,b,a) = (Z1, epsilon)
d(Z1,b,a) = (Z1, epsilon)
d(Z1,epsilon,#) = (Z2, epsilon)
Dementsprechend für eine weitere Sprache bm cm völlig analog
d(Z3,b,#) = (Z3, b#)
d(Z3,b,b) = (Z3, bb)
d(Z3,c,b) = (Z3, epsilon)
d(Z4,c,b) = (Z4, epsilon)
d(Z4,epsilon,#) = (Z4, epsilon)
Jetzt frage ich mich, wie ich dieses Vereinigen kann, denn zwei vereinigte kontextfreie Sprachen sind wieder kontextfrei. Jetzt versuche ich, dies auf den Kellerautomaten zu übertragen.
Jetzt muss man doch alle Zustände vereinigen, nur der Startzustand wird ein neuer, dazu hatte ich recherchiert: Zneuer Startzustand -> Z0 | Z3
Sind das jetzt Epsilonübergange?
Also muss ich die beiden Kellerautomaten an folgende zwei Regeln anfügen:
d(Zneuer Startzustand, epsilon, #) = (Z0, #)
d(Zneuer Startzustand, epsilon, #) = (Z3, #)
Kann das so hinkommen?
Grüße,
McMike