Kontextfreie Sprache, Vereinigung

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

Hallo,

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

Jetzt frage ich mich, wie ich dieses Vereinigen kann, denn
zwei vereinigte kontextfreie Sprachen sind wieder kontextfrei.

Die Vereinigung ist einfach nur die Sprache
a^n b^n | b^m c^m

Beim lesen des ersten Zeichens weisst du, ob du in der Sprache a^n b^n oder in b^m c^m bist, d.h. du kannst zwei weitgehend autonome Kellerautomaten bauen, die nur durch den ersten Zustand miteinander verbunden sind.

Grüße,
Moritz