Folge 21.3: Stackinterpreter

Schritt 8 - Interpretieren der Codedatei

Hier sehen Sie das BlueJ-Klassendiagramm des aktuellen Projektes. Im Zentrum steht die Klasse StackInterpreter (haben Sie Nachsicht, manchmal schreibe ich diese Klasse auch mit einem kleinen i in der Mitte, also Stackinterpreter. Das liegt an den vielen verschiedenen Versionen, die ich inzwischen von diesem Projekt erstellt habe). Der Stackinterpreter hat einen Codebuffer und eine Stackmaschine, letztere ist eine Tochterklasse von Stack.

Um den Interpreter besser und schneller testen zu können, empfiehlt es sich, eine eigene Testklasse zu schreiben, die den Interperter initialisiert, dem Interpreter den Befehl gibt, die Textdatei einzulesen und dann den jeweils nächsten Befehl zu interpretieren. Hier der Quelltext von meiner persönlichen Testklasse:

public class Test
{
   Stackinterpreter s;

   public Test()
   {
      s = new Stackinterpreter();
      s.liesDatei("Readme.txt");
   }

   public void step()
   {
      s.interpretiereNaechstenBefehl();
   }
}

Die Experten unter Ihnen werden schon gesehen haben, dass ich die Projekt-Dokumentations-Datei "Readme.txt" als Datei für den Stackcode missbrauche. Ich hatte einfach keine Lust, immer einen externen Texteditor mitlaufen zu lassen, der dann eine Datei namens "Code.txt" oder so ähnlich verwaltet. So kann ich einfach mit BlueJ selbst die Datei für den Stackcode schreiben.

Übung 21.8 (2 Punkte)

Verbessern Sie jetzt die Methode

public void interpretiereNaechstenBefehl()

der Klasse Stackinterpreter. Die Methode soll jetzt genau das tun, was ihr Name besagt, den jeweils nächsten Befehl des Codebuffers zu interpretieren. Mit dem Objektinspektor oder mit eigens dafür geschriebenen Ausgabe-Methoden sollten Sie die Funktionsweise dieser Methode überprüfen.



Übung 21.9 (2 Punkte)

Die letzte Übung dieser Seite ist nicht mehr sehr schwer.

Ergänzen Sie die Klasse Codebuffer um eine sondierende Methode gibAnzahlZeilen(), welche die Anzahl der eingelesenen Codezeilen zurückliefert, und schreiben Sie dann für die Klasse StackInterpreter eine Methode

public void interpretiere()

welche für jede Programmzeile der Datei die Methode interpretiereNaechstenBefehl() aufruft. Am Ende, also nach dem letzten Aufruf von interpretiereNaechstenBefehl(), soll das oberste Stack-Element angezeigt werden, in dem ja das Endergebnis der Berechnung gespeichert ist.


weiter mit dem Erweiterungsteil für Fortgeschrittene

Dieser Erweiterungsteil ist für fortgeschrittene Schüler(innen), die sich gut mit der Programmierung von Applets und graphischen Elementen sowie mit dem Thema Buttons und Ereignisbehandlungen auskennen (eigentlich sollten das ja alle können, die den gesamten Kurs durchgearbeitet haben, denken Sie nur an die Folge 6), und die noch richtig viel Zeit haben. Übermäßig viele Punkte gibt es im Erweiterungsteil nicht zu verdienen - lassen Sie mich einmal nachzählen - 7 Punkte. Aber 7 Punkte mehr oder nicht können schon den Unterschied zwischen einer 1 in Informatik und einer 2 ausmachen.

Sie können dem Kern-Kurs aber ohne Weiteres auch folgen, wenn Sie den Erweiterungsteil nicht durcharbeiten. Dann müssen Sie eben die Variablenverwaltung und weitere Erweiterungen des Interpreters im Textmodus (System.out.println) und mit dem Objektinspektor testen. Das ist aber durchaus möglich.

Umgekehrt können Sie aber natürlich auch eine viel bessere Oberfläche für den Stackinterpreter basteln, die viel cooler aussieht. In meinem aktuellen Informatik-Kurs am Söderblom-Gymnasium hatten die Schüler (warum schreibe ich jetzt wohl nicht "die Schüler(innen)") unheimlich tolle Ideen. Die Oberflächen sahen teils nach Star Trek, teil nach iPod bzw. iPhone und noch doller aus... Für eine solche tolle Oberfläche können Sie noch bis zu drei weitere Punkte erhalten, vorausgesetzt, der Interpreter funktioniert fehlerfrei.

weiter mit Folge 22: Variablenverwaltung

Der Stackinterpreter, den wir uns in Folge 21 zusammengebastelt haben, kann nur einfache arithmetische Ausdrücke berechnen. Was bisher fehlte, sind Variablen, wie wir sie aus anderen Programmiersprachen kennen. Am Ende dieser Folge kann unser Stackinterpreter mit richtigen Variablen rechnen.

Diese HTML-Seite wurde erstellt von Ulrich Helmich am 21. Juli 2006 und sehr stark überarbeitet, ach was, völlig umgestellt, beinahe neu geschrieben, am 10. Mai 2008.




(C) Ulrich Helmich, Mai 2008





IMPRESSUM