utm
Universelle Turingmaschine
(1) Verwenden Sie kfG Edit aus AtoCC, um die folgende kontextfreie Grammatik G für die Sprache der TM-Codierungen zu definieren.
(2) Als Beispiel betrachten wir die Turingmaschine
$M = (\{q_{0},q_{1},q_{2}\},\{\text{0},\text{1}\},\{\$,\text{0},\text{1}\},\delta,q_{0},\$,\{q_{0},q_{1}\})$
Verwenden Sie AutoEdit (aus AtoCC) und simulieren Sie die Anwendung von M auf diverse Eingabewörter. Darunter sollte es Wörter w geben, für die M(w)
- in einem Endzustand stoppt (\epsilon, 0, 1, 0101010110),
- in einem Nicht-Endzustand stoppt (11, 111, 1111),
- nicht stoppt (10).
Schauen Sie sich auch den Übergangsgraph von M an.
(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 |
| \vdots | \vdots |
| q_n | 1^{n+1} |
| L | 1 |
| R | 11 |
| N | 111 |
Zusätzlich müssen die Endzustände definiert werden.
Daraus ergibt sich die folgende Kodierung \langle M \rangle :
1 0 11 0 11 0 11 0 11 0 11 0 1 0 1 0 1 0 1 0 11 0 11 0 111 0 11 0 11 0 111 0 11 0 1 0 11 0 1 00 1 0 11
(4) 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.
(a) Die reduzierte Grammatik ohne die Regel Trenner -> 0 0 da es sonst zu shift-reduce-Konflikten kommen kann.
(b) Struktur des Zieldokuments mit weggelassenen Layout-Eigenschaften
(c) Beschreiben und Erzeugen des Compilers

