TM-Codierung (Kretschmer, Schumann)

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

[http://programmingwiki.de/BuK/IIm15 back]

== 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)<br>

 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
{| border="1" cellpadding="5" cellspacing="0"
|+ 
! $\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:
{| border="1" cellpadding="5" cellspacing="0"
|+ 
! 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:<br>
(Symbol, Kodierung)<br>
 (0,1),(1,11),(B,111),($q_0$,1),($q_1$,11),....,($q_n$,$1^{(n+1)}$),(L,1),(R,11),(N,111)
Kodierungsregel:<br>
 Übergang → Zustand 0 Zeichen 0 Zustand 0 Zeichen 0 Kopf bewegung<br>
{| border="1" cellpadding="5" cellspacing="0"
|+ 
! Ü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:<br><document>Tom_Ableitung.pdf</document><br>[[Bild:Tom_Beispielkodierung.jpg]]

== 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


Zusammenfassung aller Dateien:<document>Tom_Kreativaufgabe_Turingmaschine.zip</document>