|
class Turtleinterpreter
{
public Turtleinterpreter() //leerer
Konstruktor
{
}
public void fuehreAus(String s, Turtle
t) //hier wird die Turtle festgelegt
{
int z;
char c;
while (s.length() != 0)
//Befehl abarbeiten
{
c = s.charAt(0);
s = s.substring(1);
if (c == 'U')
// das wird penUp
{
t.penUp();
s = s.substring(1);
}
else if (c
== 'D') // das wird penDown
{
t.penDown();
s = s.substring(1);
}
else if (c == 'H') // das wird home
{
t.home();
s = s.substring(1);
}
else if (c == 'C') // das wird clear
{
t.clear();
s = s.substring(1);
}
else if (c == 'M') // das wird move
{
z = 0; // Parameter zusammensuchen
do
{
c = s.charAt(0);
s = s.substring(1);
z = 10 * z + (int) c - (int) '0';
}
while ( (c >= '0') && (s.charAt(0) <= '9'));
t.move(z);
s = s.substring(1);
}
else if (c == 'T') // das wird turn
{
z = 0;
do
{
c = s.charAt(0);
s = s.substring(1);
z = 10 * z + (int) c - (int) '0';
}
while ( (c >= '0') && (s.charAt(0) <= '9'));
t.turn(z);
s = s.substring(1);
}
else if (c == 'R') // das wird repeat
{
z = 0;
do
{
c = s.charAt(0);
s = s.substring(1);
z = 10 * z + (int) c - (int) '0';
}
while ( (c >= '0') && (s.charAt(0) <= '9'));
s = s.substring(1);
String h = "";
while (s.charAt(0) != '}')
{
h = h + s.charAt(0);
s = s.substring(1);
}
s = s.substring(1);
for (int i = 0; i < z; i++)
{
fuehreAus(h, t); // siehe Kommentar!!!
}
}
}
}
}
Bei der Ausführung der Schleife wurde ein bisschen "gemogelt". Hier wird von den Rekursionsmöglichkeiten blockorientierter Sprachen Gebrauch gemacht - also ein Kellerautomat (der Stack) benutzt - obwohl wir die damit geschachtelten Strukturen eigentlich vermeiden wollten. Der Interpreter kann damit durchaus geschachtelte Schleifen ausführen. Der vorgeschaltete Parser verhindert (hier) aber noch, dass dieses geschieht.
|