Compilerbau
Prof. Dr. Debora Weber-Wulff
Sommersemester 1998
Musterlösung
2. Übungsaufgabe (40 Punkte)
- Beweisen bzw. widerlegen Sie die folgenden Gleichungen
für reguläre Ausdrücke R, S, und T:
- (4 Punkte)
(RS | R)* = R(SR | R)*
Die Sprache von der linken RA beinhalten auch \epsilon.
Alle Elemente im rechten RA müssen mit einem R
beginnen, was nur dann \epsilon enthält, wenn
es Element von L(R) ist. Also gilt die Gleichung
nicht.
- (4 Punkte)
ST /= TS.
Angenommen, ST = TS. Seien S = s, T = t, damit ist
L(ST)={st} und L(TS)={ts}, und L(ST) /= L(TS) im
Widerspruch zur Annahme. Damit ist ST /= TS.
- (4 Punkte)
(R*|S*) /= (R|S)*.
Angenommen, (R*|S*) = (R|S)*. Seien
R = r, S = s. rsrs \element L((R|S)*),
aber nicht \element (R*|S*), im
Widerspruch zur Annahme. Damit ist die Aussage wahr.
- (4 Punkte)
Sei R = (ab|b)*c.
Welche der Zeichenreihen sind in L(R)? Warum?
- abbbabc
ab - b - b - ab - c ok
- c
\epsilon - c ok
- babac
b - ab - x nichts passt auf a, nicht in L(R)
- abab
ab - ab - x kein c, nicht in L(R)
- (4 Punkte)
Sei R = ab*c (a|b) c.
Welche der Zeichenreihen sind in L(R)? Warum?
- acac
a - \epsilon - c - a - c ok
- acbabbc
a - \epsilon - c - b - x nichts für a, nicht in L(R)
- cabac
fängt nicht mit a an, nicht in L(R)
- abcc
a - b - c - kein a oder b, nicht in L(R)
- (5 Punkte)
Sei \Sigma = { a, b }. Geben Sie eine reguläre Ausdruck
an, dessen Sprache alle Zeichenreihen enthält, die mit einem
a anfangen und aufhören.
a | (a(a|b)*a)
- (5 Punkte)
Sei \Sigma = { a, b }. Geben Sie eine reguläre Ausdruck
an, dessen Sprache alle Zeichenreihen enthält, dessen Länge
ein vielfaches von 3 sind.
((a | b)3)* (mehrere Varianten)
- (5 Punkte)
Sei \Sigma = { 0, 1 }. Geben Sie eine reguläre Ausdruck
an, dessen Sprache alle Zeichenreihen enthält, die genau
vier Nullen haben.
1*01*01*01*01*
- (5 Punkte)
Sei \Sigma = { 0, 1 }. Geben Sie eine reguläre Ausdruck
an, dessen Sprache alle Zeichenreihen enthält, in dem jeder
0 durch mindestens einer 1 gefolgt wird.
(1*011*)*
Sonderaufgabe: (5 Punkte) Zeigen Sie, daß
(S*T*)* = (S | T)*.
Die Gleichkeit wird mit Mengeninklusion gezeigt, also
(i) L((S|T)* ) Teilmenge von L((S*T*)*) und
(ii) L((S*T*)*) und Teilmenge von L((S|T)* ).
(i) Es gilt: (S|T)* = (S* | T*)*
L((S*|T*)*) Teilmenge von L((S*T*)*) gdw.
L((S+ | epsilon | T+ | epsilon)*) Teilmenge von
L(((S+ | epsilon) (T+ | epsilon))*) gdw.
L((S+ | T+ | epsilon)*) Teilmenge von
L(((S+T+ | S+ epsilon | epsilon T+ | epsilon epsilon)*) gdw.
L((S+ | T+ | epsilon)*) Teilmenge von
L(((S+T+ | S+ | T+ | epsilon epsilon)*) q.e.d.
(ii) Es sei T ein RA, dann gilt (TT)* Teilmenge T*
L((S*T*)*) Teilmenge L(((S*|T*)(S*|T*))*) Teilmenge L((S*|T*)*) gdw.
L((S*T*)*) Teilmenge L((S*S* | S*T* | T*S* | T*T*)*) Teilmenge L((S*|T*)*) gdw.
q.e.d.
Da gezeigt wurde, daß L((S|T)*) = L((S*T*)*) ist auch
(S|T)* = (S*T*)*.
Debora Weber-Wulff
Letzte Änderung: Tue May 5 18:42:38 1998