AuD Übung 03 (Stefan Bosse) [05.12.2024] |
Punkte: | Total | /2 | 1. | /2 | 2. | /2 | 3. | /2 | 4. | /2 | 5. | /2 |
In dieser Übung sollen zwei Ziele erreicht werden:
Ausgabe : 22.11.2024
Abgabe : 29.11.2024
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?
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:
int
;Command
.Wir haben wieder zwei Arten von Befehlen:
new Command('+',0)
;new Command('L',1234)
.
▸
ℂ
ℙ
[] |
✗
≡
|
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:
Immer die Operation prüfen (also leerer oder voller Stack, ungültige Op usw.).
Dann der C-Stack muss folgende Methoden haben:
Aufgabe 3. Implementiere die DataStack Klasse
▸
ℂ
ℙ
[] |
✗
≡
|
cHVibGljIGNsYXNzIERhdGFTdGFjayB7CiAgaW50IE47CiAgaW50IGRhdGFbXTsKICBpbnQgc3A7CiAgcHVibGljIERhdGFTdGFjayhpbnQgX04pIHsKICAgIHRoaXMuTj1fTjsKICAgIHRoaXMuZGF0YT1uZXcgaW50W3RoaXMuTl07CiAgICB0aGlzLnNwPTA7CiAgfQogIHB1YmxpYyB2b2lkIHB1c2goaW50IHgpIHsKICAgIHRoaXMuZGF0YVt0aGlzLnNwXT14OwogICAgdGhpcy5zcCsrOwogIH0KICBwdWJsaWMgaW50IHBvcCgpIHsKICAgIGlmICh0aGlzLnNwPT10aGlzLk4pIHRocm93ICJFUE9QIjsKICAgIGlmICh0aGlzLnNwPT0wKSB0aHJvdyAiRVBPUCI7CiAgICBpbnQgeCA9IHRoaXMuZGF0YVt0aGlzLnNwLTFdOwogICAgdGhpcy5zcC0tOwogICAgcmV0dXJuIHg7CiAgfQogIHB1YmxpYyB2b2lkIHN3YXAoKSB7CiAgICBpZiAodGhpcy5zcDwyKSB0aHJvdyAiRVBPUCI7CiAgICBpbnQgdD10aGlzLmRhdGFbdGhpcy5zcC0xXTsKICAgIHRoaXMuZGF0YVt0aGlzLnNwLTFdPXRoaXMuZGF0YVt0aGlzLnNwLTJdOwogICAgdGhpcy5kYXRhW3RoaXMuc3AtMl09dDsKICB9Cn0=
Aufgabe 4. Implementiere die CodeStack Klasse
▸
ℂ
ℙ
[] |
✗
≡
|
cHVibGljIGNsYXNzIENvZGVTdGFjayB7CiAgaW50IE47CiAgaW50IGRhdGFbXTsKICBpbnQgc3A7CiAgcHVibGljIENvZGVTdGFjayhpbnQgTikgewogICAgdGhpcy5OPU47CiAgICB0aGlzLmRhdGE9bmV3IGludFt0aGlzLk5dOwogICAgdGhpcy5zcD0wOwogIH0KICBwdWJsaWMgdm9pZCBwdXNoKENvbW1hbmQgeCkgewogICAgdGhpcy5kYXRhW3RoaXMuc3BdPXg7CiAgICB0aGlzLnNwKys7CiAgfQogIHB1YmxpYyBDb21tYW5kIHBvcCgpIHsKICAgIGlmICh0aGlzLnNwPT10aGlzLk4pIHRocm93ICJFUE9QIjsKICAgIGlmICh0aGlzLnNwPT0wKSB0aHJvdyAiRVBPUCI7CiAgICBDb21tYW5kIHggPSB0aGlzLmRhdGFbdGhpcy5zcC0xXTsKICAgIHRoaXMuc3AtLTsKICAgIHJldHVybiB4OwogIH0KICBwdWJsaWMgdm9pZCBydW4oQ29kZVN0YWNrIEMsRGF0YVN0YWNrIEQpIHsKICAgIENvbW1hbmQgbmV4dD1DLnBvcCgpOwogICAgd2hpbGUgKG5leHQuY21kIT0nLicpIHsKICAgICAgc3dpdGNoIChuZXh0LmNtZCkgewogICAgICAgIGNhc2UgJysnOgogICAgICAgICAgaW50IGE9RC5wb3AoKSwKICAgICAgICAgICAgICBiPUQucG9wKCk7CiAgICAgICAgICBELnB1c2goYStiKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJy0nOgogICAgICAgICAgaW50IGE9RC5wb3AoKSwKICAgICAgICAgICAgICBiPUQucG9wKCk7CiAgICAgICAgICBELnB1c2goYS1iKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJyUnOgogICAgICAgICAgaW50IGE9RC5wb3AoKSwKICAgICAgICAgICAgICBiPUQucG9wKCk7CiAgICAgICAgICBELnB1c2goYSk7IEQucHVzaChiKTsKICAgICAgICAgIC8vIG9kZXIgRC5zd2FwKCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdMJzoKICAgICAgICAgIEQucHVzaChuZXh0Lm9wKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICB0aHJvdyAiRVJVTiI7CiAgICAgIH0KICAgICAgbmV4dD1DLnBvcCgpOwogICAgfQogIH0KfQ==
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.
▸
ℂ
ℙ
[] |
✗
≡
|
VEJB
Aufgabe 6. Wie viele low-level JavaScript VM Operationen (verwende opCount vom Profiling) werden durchschnittlich für eine Stack VM Instruktion benötigt?