Exkurs - MyKaGoto
Programme mit Sprungbefehlen
Die Ablauflogik eines MyKa-Programms wird mit Hilfe von Kontrollanweisungen (wie z.B.
der Wiederholeanweisung while ...
)
festgelegt.
links while nichtVorWand: ziegelHinlegen schritt #while
Die Ablauflogik kann aber auch mit Hilfe von Sprungbefehlen beschrieben werden. Das folgende Flussdiagramm zeigt, wie die einzelnen Anweisungen und Bedingungen verknüpft werden müssen.
Ein MyKaGoto-Programm setzt die Verknüpfung von Anweisungen und Bedingungen mit Hilfe von Sprungmarken und Sprungbefehlen wie folgt um:
links label .L0 if nichtVorWand: goto .L1 else: goto .L2 label .L1 ziegelHinlegen schritt goto .L0 label .L2
Wir werden solche MyKaGoto-Programme auch in einer strukturierten Form benutzen. Ein zugehöriges strukturiertes MyKaGoto-Programm ist eine Liste bestehend aus Label-Anweisung-Paaren.
[ (None, ['links']) ('.L0', ['noop']) (None, ['if', ['nichtVorWand'], ['goto', '.L1'], ['goto', '.L2']]) ('.L1', ['noop']) (None, ['ziegelHinlegen']) (None, ['schritt']) (None, ['goto', '.L0']) ('.L2', ['noop']) ]
Die Codesprache Goto
Syntax und Semantik der Sprache Goto werden hier nur informell beschrieben.
Goto-Programme bestehen aus Anweisungen, die mit natürlichen Zahlen als Marken versehen sind. In jeder Zeile des Quelltextes steht nur eine Anweisung. Der Einfachheit haber werden nur die benötigten Marken dargestellt. Es gibt verschiedene Typen von Anweisungen:
- Zuweisungen der Gestalt
[Variable] = [Term]
- Bedingungen der Gestalt
[Variable] != 0
- Sprunganweisungen der Gestalt
GOTO [Marke]
- Passieranweisungen der Gestalt
PASS
- Stoppanweisungen der Gestalt
STOP
Variablenbezeichner dürfen nur in der Form x[Zahl]
gebildet werden, d.h., nach dem Symbol x
folgt eine natürliche Zahl.
Terme in Zuweisungen müssen immer vom Typ [Zahl]
oder [Variable] + [Zahl]
oder
[Variable] - [Zahl]
sein. Auch hier steht [Zahl]
für eine beliebige natürliche Zahl.
Bei der Ausführung von Goto-Programmen sind folgende Vorgaben zu beachten:
- Eine Zuweisung der Gestalt
[Variable] = [Term]
wird wie in der Sprache While ausgeführt. Als nächste Anweisung wird die in der nächsten Programmzeile ausgeführt. - Für die Ausführung einer Bedingungen der Gestalt
[Variable] != 0
gilt: Wenn die Bedingung nicht erfüllt ist, führe die Anweisung in der nächsten Zeile aus, ansonsten die in der übernächsten Zeile. - Bei einer Sprunganweisungen der Gestalt
GOTO [Marke]
wird die Ausführung mit der Anweisung fortgesetzt, die mit der angegebenen Marke versehen ist. - Eine Passieranweisung der Gestalt
PASS
wird übergangen. Es wird also in der darauf folgenden Zeile weitergemacht. - Eine Stoppanweisung der Gestalt
STOP
führt zum Abbruch der Ausführung.