BuK-KA-UTM

Aus ProgrammingWiki
Archivierte Version vom 2013-05-20T22:40:27+00:00. Aktuelle Version

Inhaltsverzeichnis

Deutschmann, Horbach

Aufgabenstellung

Mithilfe von kfg Edit aus ATOCC soll zuerst die Sprache der TM-Codierungen durch die Grammatik G definiert werden.

Anschließend soll eine Turingmaschine M in Autoedit beschrieben und die Anwendung von M auf verschiedene Eingabewörter simuliert werden.

Die TM M soll danach mit G codiert werden.

Aufbauend auf G soll nun ein Compiler erstellt werden, der die Codierung von M in eine von ATOCC lesbare Form (XML Dokument) kompiliert.

Grammatik der TM-Codierungen

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

Die Turingmaschine M

Als Beispiel soll die Turingmaschine M mit folgender Definition dienen:

$M = (\{q_0, q_1, q_2\}, \{0, 1\}, \{\$, 0, 1\}, \delta, q_0, \$, \{q_0, q_1\})$

Fdeutschmann_BeispielTMTransitiontable.gif

Simulation der TM

Die Turingmaschine stoppt für folgende Wörter: \epsilon, 0, 1, 0101010110

Die Turingmaschine stoppt in einem Nicht-Endzustand für die Wörter: 11,111,1111

Die Turingmaschine stoppt nicht für: 10

Kodierung der TM

Die Turingmaschine soll nun unter Verwendung der folgenden Kodierungsregeln per Hand kodiert werden:

SymbolKodierung
01
111
B111
q_01
q_111
\vdots\vdots
q_n1^{n+1}
L1
R11
N111
(q0,1) = (q1,1,R)
1 0 11 0 11 0 11 0 11


(q1,0) = (q0,0,L)
11 0 1 0 1 0 1 0 1


(q1,1) = (q2,1,R)
11 0 11 0 111 0 11 0 11


(q2,1) = (q0,1,L)
111 0 11 0 1 0 11 0 1

Fasst man nun die einzelnen Kodierungen zusammen ergibt das die folgenden Teilkodierung:

1011011011011 0 1101010101 0 110110111011011 0 1110110101101

Für eine vollständige Kodierung fehlen noch die Endzustände, welche durch den Trenner (00) abgetrennt werden:

Endzustände:
1 0 11

Turingmaschine (gesamt):
1011011011011 0 1101010101 0 110110111011011 0 1110110101101 00 1 0 11

sitosalz

Aufgabenstellung

TM-Codierung: kfG und Compiler in AtoCC-TM-Repräsentation (als Zielsprache)

  • Anleitung: s. Aufgabenblatt
  • Compiler im Compilerwiki und von ProgrammingWiki aus verlinken

Grammatik

Verwenden Sie kfG Edit aus AtoCC, um die folgende kontextfreie Grammatik G für die Sprache der TM-Codierungen zu definieren. G = (N, T, P, s)

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

Beispiel-Turingmaschine

Als Beispiel wird eine Turingmaschine $ M = (\{q_0, q_1, q_2\}, \{0, 1\}, \{\$, 0, 1\}, \$, q_0, \$, \{q_0, q_1\}) $ mit folgender Übergangstabelle


\delta$\$$01
|q_0--(q_1,1,R)
|q_1-(q_0,0,L)(q_2,1,R)
|q_2--(q_0,1,L)


betrachtet. Die Übergangstabelle wird in AutoEdit (aus AtoCC) überführt und als Automatentyp TM ausgewählt.

Anschließend wird folgender Übergangsgraph für die Beispiel-Turingmaschine in AtoCC angezeigt:


Sirorose_Bildschirmfoto_2012-05-03_um_19.32.33.png

Simulation der TM

Im nächsten Schritt werden Wörter w für die TM simuliert.

Kodierung

In der folgenden Tabelle sind die Kodierungen, welche sich aus der Grammatik G ergeben, für die Beispiel-Turingmaschine ersichtlich.


SymbolKodierung
| 01
| 111
| q_01
| q_111
| q_2111
| L1
| R11
| N111
\delta(q_0,1) = (q_0,1,R) \mathrel{\widehat{=}} 1011011011011\text{   0} 
\delta(q_1,0) = (q_0,0,L) \mathrel{\widehat{=}} 1101010101\text{   0} 
\delta(q_1,1) = (q_2,1,R) \mathrel{\widehat{=}} 110110111011011\text{   0} 
\delta(q_2,1) = (q_0,1,L) \mathrel{\widehat{=}} 1110110101101\text{   00} 
Endzustände:    1011


Anhand der vorgegebenen Kodierungvorschrift ergibt sich folgendes Wort für die Turing-Maschine:

101101101101101101010101011011011101101101110110101101001011

Dateien

Sitosalz_UTM.zip

Compiler

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)

Verwenden Sie VCC, um einen entsprechenden Compiler zu beschreiben und zu erzeugen. Wenden Sie diesen Compiler auf die TM-Kodierung von M an und überprüfen Sie, ob die ursprüngliche Maschine  M (in Auto Edit) entsteht.

http://www.michael-hielscher.de/compilerwiki/index.php/CompilerBuK_TM