====== Beispiele ======
#tape 1111
# Addiert 1 zu einer unären zahl
# Die Maschine stoppt am Anfang der Zahl.
# Vorwärts bis zum ersten . Schreibe dort eine 1, gehe nach links und mache fertig
start
. 1 L fertig
# Rückwärts bis zum ersten . Dann rechts und stop.
fertig L
. . R stop
# Schreibt bla ;-)
# {...} Beinhaltet Kommandos der Form Px, um den Buchstaben x zu schreiben, oder R,L, um den Kopf zu bewegen.
# Damit werden eine ganze Reihe von Zuständen generiert.
start
. {Pb R Pl R Pa L L} stop
===== Spezifikation (sort of) =====
==== Spezialzeichen ====
Folgende Zeichen dürfen nicht als Symbole auf dem Band verwendet werden:
* Leerzeichen (Trennsymbol)
* ''.'' Blank
* ''*'' (wildcard)
* ''@'' (Symbolvariable in m-Funktion oder m-Aufruf)
* ''\$'' (Zustandsvariable)
* ''['' und '']'' (Symbolbereich)
* ''_'' (underscore, wird intern verwendet)
* ''#'' Beginn eines Kommentars
==== Syntax ====
=== Kommentare und Band-Definition ===
* Zeilen, die mit # beginnen sind Kommentar, ausser nach ''#tape'' folgen die Symbole, die beim Start auf dem Band geschrieben sind.
=== Zustände ===
* Die Zustände sind durch eine Leerzeile getrennt.
* Der default ist das Zeichen lassen und nach rechts gehen. Die default-Richtung kann nach dem Zustandsnamen angegeben werden. Danach kann zusätzlich ein default-Zustand angegeben werden (wenn von diesem verschieden).
* Für ein Zeichen ''read'' kann in einem Zustand folgendes definiert werden:
* ''read write dir state'', wobei dir auch 'N' für nicht bewegen sein kann.
* ''read {c1 c2 ...} state'', wobei ''c1, c2'' etc. Kommandos 'R' für rechts, 'L' für links und 'Px' für ein x aufs Band schreiben ist.
* Es ist möglich, für ''read'' einen Bereich von Zeichen mit ''[xyz]'' anzugeben (nur Symbolen, keine @1 etc.), oder ''*'' für alle möglichen Zeichen.
* Wird für ''write'' ein ''*'' verwendet bezieht sich das auf das gelesene Zeichen.
=== m-Funktionen ===
* Header: ''@name(x ; y )''
* wobei x die Anzahl der zu übergebenden Symbole als Argumente ist und
* y die Anzahl der zu übergebenden Zustände ist.
* Body: Menge von lokalen Zustandsdefinitionen. Diese können ''@1'', ''@2'', etc. als übergebene Symbole und ''$1'', ''$2'' als übergebene Zustände enthalten.
* Die Zustände sollten global eindeutige Namen haben (ausser Sie werden nur lokal in der m-Funktion verwendet).
* Typischerweise wird ein Zustand übergeben, zu dem die Funktion «zurückkehren» soll, wenn sie fertig ist.
* Footer: ''@end''
{{kurse:ef05a-2021:turingmaschinen:tm_d.pdf|Slides vom Turing-Maschinen-Kurs der Uni Fribourg}}