Registermaschine AlgoDat WS99 AlgoDat WS99 meine Hauptseite Home

Class ChS_Registermaschine2

java.lang.Object
  |
  +--ChS_Registermaschine2

class ChS_Registermaschine2
extends java.lang.Object

Realisiert eine Registermaschine, wie sie in der Vorlesung AlgoDat beschrieben wurde.
Keine öffentlichen Felder mehr, dafür auch weniger Sicherheitsüberprüfungen während des Programmlaufs.


Constructor Summary
ChS_Registermaschine2(java.lang.String[] programm, int[] speicher)
          Lädt ein Programm und die Speicherbelegung.
 
Method Summary
 boolean beendet()
          True, wenn das Programm beendet ist (der aktuelle Befehl ist END), false, wenn nicht.
(package private)  void parse(java.lang.String[] programm)
          Übersetzt das als String-Feld übergebene Programm in die interne Darstellung.
Setzt den Befehlszähler b und die Anzahl der ausgeführten Befehle t zurück.
Befehl und Operand (Zahl) müssen durch Leerzeichen getrennt sein.
 void run()
          Führt das Programm bis zum Ende aus, ohne die Konfigurationen auszugeben.
 void schreibeKonfiguration()
          Gibt die aktuelle Konfiguration auf die Konsole aus.
 void schreibeProgramm()
          Gibt das komplette Programm (ohne den Registerinhalt) auf die Konsole aus.
(package private)  void setzeRegister(int[] speicher)
          Übernimmt die Speicherregister vom int-Feld.
 boolean step()
          Führt den aktuellen Befehl aus und kehrt dann zurück.
 
Methods inherited from class java.lang.Object
, clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ChS_Registermaschine2

public ChS_Registermaschine2(java.lang.String[] programm,
                             int[] speicher)
                      throws java.lang.NumberFormatException,
                             java.lang.IllegalArgumentException
Lädt ein Programm und die Speicherbelegung. Dem Objekt wird das Programm als String-Feld übergeben, zusammen mit der initialen Speicherbelegung. Der Befehlszähler zeigt standardmäßig auf den ersten Befehl (Zeile 1). Operanden und Registerinhalte sind nichtnegative ganze Zahlen.
Parameters:
programm - das Programm, wie unter parse(String[]) beschrieben
speicher - die Speicherbelegung, wie unter setzeRegister(int[]) beschrieben
Throws:
java.lang.NumberFormatException - siehe parse und setzeRegister
java.lang.IllegalArgumentException - siehe parse und setzeRegister
auch wenn ein illegaler Registerzugriff oder Sprung im Programm ist
oder das Programm nicht mit END endet
"Alles was schiefgehen kann, wird schiefgehen." Murphys Gesetz
See Also:
parse(java.lang.String[]), setzeRegister(int[])
Method Detail

beendet

public boolean beendet()
True, wenn das Programm beendet ist (der aktuelle Befehl ist END), false, wenn nicht.
Returns:
boolean

parse

void parse(java.lang.String[] programm)
     throws java.lang.IllegalArgumentException,
            java.lang.NumberFormatException
Übersetzt das als String-Feld übergebene Programm in die interne Darstellung.
Setzt den Befehlszähler b und die Anzahl der ausgeführten Befehle t zurück.
Befehl und Operand (Zahl) müssen durch Leerzeichen getrennt sein. END und NOP brauchen keine Operanden. Gross-/Kleinschreibung ist egal.
Läßt die Register unverändert.
Parameters:
programm - das Programm
Throws:
java.lang.IllegalArgumentException - wenn ein Befehl nicht bekannt ist
java.lang.NumberFormatException - wenn ein Operand keine nichtnegative ganze Zahl ist

run

public void run()
Führt das Programm bis zum Ende aus, ohne die Konfigurationen auszugeben.
See Also:
step()

schreibeKonfiguration

public void schreibeKonfiguration()
Gibt die aktuelle Konfiguration auf die Konsole aus.

schreibeProgramm

public void schreibeProgramm()
Gibt das komplette Programm (ohne den Registerinhalt) auf die Konsole aus.

setzeRegister

void setzeRegister(int[] speicher)
             throws java.lang.IllegalArgumentException,
                    java.lang.NumberFormatException
Übernimmt die Speicherregister vom int-Feld. Setzt den Befehlszähler zurück. Reserviert genau so viele Register, wie Elemente in speicher sind. Mehr Register existieren dann nicht!
Parameters:
speicher - die Speicherregister (ohne Befehlszähler)
Throws:
java.lang.IllegalArgumentException - wenn speicher ein leeres Feld ist
java.lang.NumberFormatException - wenn ein Registerinhalt kleiner als 0 ist

step

public boolean step()
Führt den aktuellen Befehl aus und kehrt dann zurück.
Returns:
boolean - true = Programm läuft weiter, false = beendet