AuD Übung 03 (Stefan Bosse) [05.12.2024]
Gruppe und Namen der Mitglieder
Punkte:Total/21./22./23./24./25./2

Übung Stapelspeicher (03)

In dieser Übung sollen zwei Ziele erreicht werden:

  1. Den ADT Stack als Java Klasse implementieren;
  2. Lösen eines komplexeren Problems mit einer einfachen VM.

Ausgabe : 22.11.2024

Abgabe : 29.11.2024

Grundlagen

Aufgabe 1. Welchen Eigenschaften besitzen lineare Tabellen (Arrays)?


Aufgabe 2. In einen Stack werden in der gegebenen Reihenfolge {1,2,3,4} Werte nacheinander gechrieben. In welcher Reihenfolge werden sie wieder ausgegeben?


Kommandoklasse

In dieser Übung soll die in der Vorlesung vorgestellte sehr einfache Stackmaschine nachgebaut werden. Dazu wird zuerst eine Kommandoklasse benötigt, die die einfachen Befehlsformate aus der Vorlesung nun durch Kommando Objekte ersetzt. Die VM solle aus zwei Stacks bestehen:

  1. Daten Stack (D-Stack) für den Datentype int;
  2. Code Stack (C-Stack) für den Datentype Command.

Wir haben wieder zwei Arten von Befehlen:

  1. Befehle ohne Operanden mit dem Befehlscode als Zeichen new Command('+',0);
  2. Literale als Befehl die Werte auf den D-Stack zu schieben new Command('L',1234).

Kommando Klasse

 ▸ 
 ℂ 
 ℙ 
[]
 ✗ 
 ≡ 

Stackspeicher

Ab hier sollen Algorithmen in Java mit dem integrierten JS Transpiler implementiert werden.

Implementiere die beiden Stack Speicherklassen DataStack für den Integer Datentyp (int) und den Codestack für Command Daten.

Der D-Stack muss folgende Methoden haben:

  1. pop
  2. push
  3. swap

Immer die Operation prüfen (also leerer oder voller Stack, ungültige Op usw.).

Dann der C-Stack muss folgende Methoden haben:

  1. pop
  2. push
  3. run mit folgenden Befehlen: '+','-','%','.','L' (siehe Vorlesung).

Aufgabe 3. Implementiere die DataStack Klasse


DataStack Klasse

 ▸ 
 ℂ 
 ℙ 
[]
 ✗ 
 ≡ 

cHVibGljIGNsYXNzIERhdGFTdGFjayB7CiAgaW50IE47CiAgaW50IGRhdGFbXTsKICBpbnQgc3A7CiAgcHVibGljIERhdGFTdGFjayhpbnQgX04pIHsKICAgIHRoaXMuTj1fTjsKICAgIHRoaXMuZGF0YT1uZXcgaW50W3RoaXMuTl07CiAgICB0aGlzLnNwPTA7CiAgfQogIHB1YmxpYyB2b2lkIHB1c2goaW50IHgpIHsKICAgIHRoaXMuZGF0YVt0aGlzLnNwXT14OwogICAgdGhpcy5zcCsrOwogIH0KICBwdWJsaWMgaW50IHBvcCgpIHsKICAgIGlmICh0aGlzLnNwPT10aGlzLk4pIHRocm93ICJFUE9QIjsKICAgIGlmICh0aGlzLnNwPT0wKSB0aHJvdyAiRVBPUCI7CiAgICBpbnQgeCA9IHRoaXMuZGF0YVt0aGlzLnNwLTFdOwogICAgdGhpcy5zcC0tOwogICAgcmV0dXJuIHg7CiAgfQogIHB1YmxpYyB2b2lkIHN3YXAoKSB7CiAgICBpZiAodGhpcy5zcDwyKSB0aHJvdyAiRVBPUCI7CiAgICBpbnQgdD10aGlzLmRhdGFbdGhpcy5zcC0xXTsKICAgIHRoaXMuZGF0YVt0aGlzLnNwLTFdPXRoaXMuZGF0YVt0aGlzLnNwLTJdOwogICAgdGhpcy5kYXRhW3RoaXMuc3AtMl09dDsKICB9Cn0=

Aufgabe 4. Implementiere die CodeStack Klasse


CodeStack Klasse

 ▸ 
 ℂ 
 ℙ 
[]
 ✗ 
 ≡ 

cHVibGljIGNsYXNzIENvZGVTdGFjayB7CiAgaW50IE47CiAgaW50IGRhdGFbXTsKICBpbnQgc3A7CiAgcHVibGljIENvZGVTdGFjayhpbnQgTikgewogICAgdGhpcy5OPU47CiAgICB0aGlzLmRhdGE9bmV3IGludFt0aGlzLk5dOwogICAgdGhpcy5zcD0wOwogIH0KICBwdWJsaWMgdm9pZCBwdXNoKENvbW1hbmQgeCkgewogICAgdGhpcy5kYXRhW3RoaXMuc3BdPXg7CiAgICB0aGlzLnNwKys7CiAgfQogIHB1YmxpYyBDb21tYW5kIHBvcCgpIHsKICAgIGlmICh0aGlzLnNwPT10aGlzLk4pIHRocm93ICJFUE9QIjsKICAgIGlmICh0aGlzLnNwPT0wKSB0aHJvdyAiRVBPUCI7CiAgICBDb21tYW5kIHggPSB0aGlzLmRhdGFbdGhpcy5zcC0xXTsKICAgIHRoaXMuc3AtLTsKICAgIHJldHVybiB4OwogIH0KICBwdWJsaWMgdm9pZCBydW4oQ29kZVN0YWNrIEMsRGF0YVN0YWNrIEQpIHsKICAgIENvbW1hbmQgbmV4dD1DLnBvcCgpOwogICAgd2hpbGUgKG5leHQuY21kIT0nLicpIHsKICAgICAgc3dpdGNoIChuZXh0LmNtZCkgewogICAgICAgIGNhc2UgJysnOgogICAgICAgICAgaW50IGE9RC5wb3AoKSwKICAgICAgICAgICAgICBiPUQucG9wKCk7CiAgICAgICAgICBELnB1c2goYStiKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJy0nOgogICAgICAgICAgaW50IGE9RC5wb3AoKSwKICAgICAgICAgICAgICBiPUQucG9wKCk7CiAgICAgICAgICBELnB1c2goYS1iKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJyUnOgogICAgICAgICAgaW50IGE9RC5wb3AoKSwKICAgICAgICAgICAgICBiPUQucG9wKCk7CiAgICAgICAgICBELnB1c2goYSk7IEQucHVzaChiKTsKICAgICAgICAgIC8vIG9kZXIgRC5zd2FwKCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdMJzoKICAgICAgICAgIEQucHVzaChuZXh0Lm9wKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICB0aHJvdyAiRVJVTiI7CiAgICAgIH0KICAgICAgbmV4dD1DLnBvcCgpOwogICAgfQogIH0KfQ==

Die VM programmieren

Ab hier sollen Algorithmen in Java mit dem integrierten JS Transpiler implementiert werden.

Teste die VM mit folgenden Programmen (alle vier Aufgaben sollen unten zusammen getestet werden):

112 234 + .
112 234 - .
112 234 + 100 - .
112 234 % - .

Aufgabe 5. Implementiere die Tests in main und führe die Tests durch bis die Ergebnisse erwartungsgemäß sind.


VM Test

 ▸ 
 ℂ 
 ℙ 
[]
 ✗ 
 ≡ 

VEJB

Aufgabe 6. Wie viele low-level JavaScript VM Operationen (verwende opCount vom Profiling) werden durchschnittlich für eine Stack VM Instruktion benötigt?



Created by the NoteBook Compiler Ver. 1.32.5 (c) Dr. Stefan Bosse (Thu Dec 05 2024 10:57:43 GMT+0100 (Central European Standard Time))