Karel J. Robot Simulator für vereinfachte Syntax

Die vereinfachte Syntax

Zwei Einschränkungen gelten für das gesamte Roboter Program. Schlüsselwörter dürfen nicht als Variablen-, Methodennamen etc. verwendet werden. Das gilt auch in echten Java Programmen. Zu den Java Schlüsselwörtern kommen noch die der vereinfachten Syntax hinzu (task, loop/code>, AND, OR, NOT).
Außerdem muß der Parser teilweise temporäre Variablen einführen. Es darf aber natürlich nicht zu Namenskonflikten mit Bezeichnern kommen, die der Benutzer verwendet. Deshalb beginnen alle Bezeichner, die vom Parser eingefügt werden mit einem Tiefstrich '_'. Wenn also im Roboter Programm keine Bezeichner mit einem Tiefstrich anfangen, kann es nicht zu Problemen kommen.

task:
In einem Task wird die Aufgabe eines Roboters beschrieben. D.h. hier dürfen Auslieferungs-Anweisungen an die Fabrik stehen und Befehle an einen Roboter. Ein Task wird definiert durch:

task {
...
}
Er wird also eingeleitet durch das Schlüsselwort task und die Anweisungen und Befehle folgen, in {} eingeschlossen. Für den Simulator für vereinfachte Syntax ist ein Task das eigentliche Programm. Also er übersetzt Dateien, die solch eine Task Definition beinhalten. Da aber auch nur ein Task ausgeführt werden kann, darf eine Datei nur eine Task Definition beinhalten. In derselben Datei dürfen ebenfalls Java Klassen defniert werden (aber keine, die public oder protected sind).
So wird ein Task übersetzt

loop( numerischer Wert ):
Die Anweisung loop( numerischer Wert ) bedeutet, dass die folgenden Anweisungen sooft wiederholt ausgeführt werden wie in dem numerischen Ausdruck angegeben (es sind nur ganze Zahlen erlaubt). Ich gebe einige Beispiele:

// 1. Beispiel
loop( 5 ) {
    karel.turnLeft();
}

// 2. Beispiel
loop( 5 )
    karel.turnLeft();
karel.turnLeft();

// 3. Beispiel
loop( 5 ) {
    karel.turnLeft();
    karel.turnLeft();
}
Man sieht, dass auf eine loop-Anweisung sowohl Befehle in {} als auch ohne {} folgen dürfen. Es gibt einen Unterschied zwischen beiden Schreibweisen. Werden keine Klammern angegeben, so wird nur der unmittelbar folgende Befehl wiederholt. Ansonsten werden alle Befehle, die in Klammern eingeschlossen sind wiederholt. In Beispiel 1 dreht sich karel 5 mal nach links, in Beispiel 2 6 mal und im dritten Beispiel 10 mal.
So wird loop übersetzt



Sichtbarkeits-Modifikatoren und Vererben von Konstruktoren Erstmal nur die Kurzfassung: Sichtbarkeits-Modifikatoren (d.h. public, etc.) spielen keine Rolle. Es sollten gar keine verwendet werden! Dort wo es nötig ist, werden sie vom Simulator eingefügt.
Zu den Konstruktoren: jede Roboter Klasse bekommt von dem Simulator einen Konstruktor der Signatur: <init>(int street, int avenue, int direction, int beepers). Andere Konstruktoren werden wie bei normalem Java nicht vererbt.
Dokumentation zur Codeerzeugung wird noch folgen.