TM-Codierung (Kretschmer, Schumann)
Aus ProgrammingWiki
Inhaltsverzeichnis |
Aufgabe 1
Verwenden Sie kfG Edit aus AtoCC, um die folgende kontextfreie Grammatik G fur die ¨
Sprache der TM-Codierungen zu definieren. G = (N, T, P, s)
N = {TMcodierung, Trenner,
Endzustaende, Delta,
Uebergang, Kopfbewegung,
L, R, N, Zeichen, Null,
Eins, B, Zustand, Einsenfolge}
T = {0, 1}
P = {
TMcodierung -> Delta Trenner Endzustaende
Trenner -> 0 0
Endzustaende -> Zustand 0 Endzustaende
| Zustand
Delta -> Uebergang 0 Delta | Uebergang
Uebergang -> Zustand 0 Zeichen 0 Zustand 0 Zeichen 0 Kopfbewegung
Kopfbewegung -> L | R | N
L -> 1
R -> 1 1
N -> 1 1 1
Zeichen -> Null | Eins | B
Null -> 1
Eins -> 1 1
B -> 1 1 1
Zustand -> Einsenfolge
Einsenfolge -> 1 | 1 Einsenfolge
}
s = TMcodierung
Aufgabe 2
Als Beispiel betrachten wir die Turingmaschine $ M = (\{q_0 , q_1 , q_2 \}, \{0, 1\}, \{\$, 0, 1\}, δ, q_0 , \$, \{q_0 , q_1 \})$ mit
| $\delta$ | $\$$ | 0 | 1 |
|---|---|---|---|
| $q_0$ | - | - | $(q_1 , 1 ,R)$ |
| $q_1$ | - | $(q_0 , 0 ,L)$ | $(q_2 , 1 ,R)$ |
| $q_2$ | - | - | $(q_0 , 1 ,L)$ |
- Eingaben:
| Eingabewort | Stoppt | Endzustand |
|---|---|---|
| $\epsilon $ | true | true |
| 0 | true | true |
| 1 | true | true |
| 0101010110 | true | true |
| 11 | true | false |
| 111 | true | false |
| 1111 | true | false |
| 10 | false | - |
Aufgabe 3
Kodieren Sie M aus dem Beispiel per Hand, indem Sie die folgenden Kodierungsregeln
befolgen:
(Symbol, Kodierung)
(0,1),(1,11),(B,111),($q_0$,1),($q_1$,11),....,($q_n$,$1^{(n+1)}$),(L,1),(R,11),(N,111)
Kodierungsregel:
Übergang → Zustand 0 Zeichen 0 Zustand 0 Zeichen 0 Kopf bewegung
| Übergang | Kodiert |
|---|---|
| $ (q_0,1) = (q_1 ,1,R) $ | 1 0 11 0 11 0 11 0 11 |
| $ (q_1,0) = (q_0 ,0,L) $ | 11 0 1 0 1 0 1 0 1 |
| $ (q_1,1) = (q_2 ,1,R) $ | 11 0 11 0 111 0 11 0 11 |
| $ (q_2,1) = (q_0 ,1,L) $ | 111 0 11 0 1 0 11 0 1 |
Vollständige kodierte Maschine:
Übergänge Trenner Endzustände 1011011011011 0 1101010101 0 110110111011011 0 1110110101101 00 1011
Aufgabe 4
Analysieren Sie anschließend das von Ihnen bestimmte Wort $w = encode(M ), w ∈ {0, 1}^+$ . Da G eine kfG ist, gelingt diese Prüfung in jedem Fall. Verfälschen Sie w ein wenig und parsen Sie das so entstandene Wort.
Ableitung:![]() | Tom_Ableitung.pdf (0.1 MB) |
Aufgabe 5
Als nächstes soll ein Compiler entwickelt werden, der ein syntaktisch korrektes Wort aus L(G), also eine korrekte TM-Codierung, in eine TM in der AtoCC-Repräsentation übersetzt. Beginnen Sie mit der Generierung eines LALR(1)-Parsers für G. Wichtiger Hinweis: Um shift-reduce-Konflikte zu vermeiden, reduzieren Sie die o.g. Grammatik G, indem Sie die Regel $Trenner -> 0 0$ streichen und ein entsprechendes Token für den Scanner definieren.
Token : Trenner, Expression : 00
![]() | Tom_Kreativaufgabe_Turingmaschine.zip (0.7 MB) |

