Kurs:Programmieren in Aleph/Sprachschatz
- Einleitung
- Installation
- Sprachschatz
- Objekte
- Befehle
- Java-Basis
- Java-Kooperation
- Anwendungen
- Compiler
- Rekursion
- Infix
- Listen
Ein- und Ausgabe
[Bearbeiten]Commands zur Aus- und Eingabe. Hier aufgeführt sind auch elementare Commands zur Hilfestellung bei der Programmentwicklung.
Command | Stacksituation(en) | Beschreibung |
---|---|---|
showDef | command --> | Compilierten Code des commands in der V2M-Form anzeigen. |
.S | Gibt den Inhalt des Stacks nicht konsumierend aus. | |
commands | Inhalt des Dictionaries ausgeben. | |
typ | object --> string | Typ (Java) von object ermitteln und als string auf dem Stack ablegen. |
newline | --> "\n" | Legt den Zeilenumbruch auf dem Stack ab. |
. (dot) | object --> | Gibt object in möglichst lesbarer Form aus. |
load | string --> | Nimmt die Datei mit der Bezeichnung string als aktuellen Eingabestrom. Kehrt hinterher zum ursprünglichen Strom zurück. |
word | --> true string --> false |
Liest die nächste nicht leere Zeichenfolge aus dem Eingabestrom und legt sie als String auf den Stack. |
Binäre arithmetische Operatoren
[Bearbeiten]Einige dieser Operatoren sind auch für andere "Typen" (Booleans, Strings) definiert, bzw. etabliert.
Command | Stacksituation(en) | Beschreibung |
---|---|---|
/ | num1 num2 --> num | Legt den Quotienten num1/num2 auf den Stack. |
* | num1 num2 --> num flg1 flg2 --> flg |
Legt das Produkt num1*num2 oder die boolesche Konjunktion von flg1, flg2 auf den Stack. |
- | num1 num2 --> num | Legt die Differenz num1-num2 auf den Stack. |
+ | num1 num2 --> num str1 str2 --> str |
Legt die Summe num1+num2 oder die concatenation von str1. str2 auf den Stack. |
Relationen oder Vergleichsoperatoren
[Bearbeiten]Auch das letzte Command ist eine binäre Operation, denn der Vergleich erfolgt auf "null". Bei einigen Relationen sind auch andere "Typen" als numerische definiert. In der Stacksituation sind die zulässigen "Typen" aufgeführt.
Oft wird vergessen, dass Relationen durchaus als boolesche Operationen angesehen werden können. So ist das Ergebnis einer "Implikation" deshalb identisch mit dem eines Vergleichs auf "kleiner oder gleich", weil es sich um dieselbe Operation handelt.
Command | Stacksituation(en) | Beschreibung |
---|---|---|
<> | num1 num2 --> flg flg1 flg2 --> flg |
Legt true ab wenn obj1 ungleich obj2, sonst false. |
< | num1 num2 --> flg flg1 flg2 --> flg |
Legt true ab wenn obj1 kleiner obj2, sonst false. |
>= | num1 num2 --> flg flg1 flg2 --> flg |
Legt true ab wenn obj1 größer oder gleich obj2, sonst false. |
> | num1 num2 --> flg flg1 flg2 --> flg |
Legt true ab wenn obj1 größer obj2, sonst false. |
<= | num1 num2 --> flg flg1 flg2 --> flg |
Legt true ab wenn obj1 kleiner oder gleich obj2, sonst false. |
= | num1 num2 --> flg flg1 flg2 --> flg |
Legt true ab wenn obj1 gleich obj2, sonst false. |
?null | obj --> flg | Legt true ab wenn obj ein null-Objekt ist true, sonst false. |
Logische Operatoren
[Bearbeiten]Diese Commands sind sowohl für boolean als auch für ganzzahlige Objekte (hier allgemein int) definiert.
Command | Stacksituation(en) | Beschreibung |
---|---|---|
and | int1 int2 --> int flg1 flg2 --> flg |
Legt die bitweise Konjunktion der integer Objekte oder die Konjunktion der boolean Objekte auf den Stack. |
or | int1 int2 --> int flg1 flg2 --> flg |
Legt die bitweise Disjunktion der integer Objekte oder die Konjunktion der boolean Objekte auf den Stack. |
not | int --> int flg --> flg |
Legt das 1er Komplement des integer Objekts oder die Negation des boolean Objekts auf den Stack. |
Steuerung des Ablaufs
[Bearbeiten]Diese Commands nehmen Einfluß auf den Ablauf der Verarbeitung von Sequenzen.
Command | Stacksituation(en) | Beschreibung |
---|---|---|
exit | Verlässt das laufende Command sofort. | |
endloop | Ende einer Schleife. Kehrt an den Anfang zurück. | |
leave | flg --> | Verlässt eine Schleife, wenn true auf dem Stack liegt. Sonst wird beim folgende Command fortgefahren. |
loop | Anfang einer Schleife. | |
endif | Ende einer if ... [else ...] Anweisung. | |
else | Anweisungen bis endif ausführen. | |
if | flg --> | Wenn true auf dem Stack liegt, Anweisungen bis else oder endif ausführen. |
Erweiternde oder Creative Commands
[Bearbeiten]Diese Commands erweitern oder vermindern den Wortschatz, Compilieren Sequenzen oder haben beziehen sich auf Aleph-Variablen.
Command | Stacksituation(en) | Beschreibung |
---|---|---|
free | string --> | Variable mit der Bezeichnung string von jeder Bindung befreien. |
is | string object --> | Variable mit der Bezeichnung string an object binden. |
variable | string --> | Neue, ungebundene Variable mit der Bezeichnung string erstellen. |
forget | command --> | Entfernt alle Commands und die Einträge im Dictionary ab command einschließlich |
bind | Verbindet die compilierte Sequenz mit dem letzten Eintrag im Dictionary. | |
compile | command --> | Compiliert das command ans Ende der Sequenz. Ist keine Sequenz vorhanden, ist command das erste. |
entry | string --> | Neuen Eintrag mit der Bezeichnung string im Dictionary machen. |
Manipulation des Stacks
[Bearbeiten]Diese Commands ändern die Situation auf dem Stack durch Umverteilung der vorhandenen Elemente.
Command | Stacksituation(en) | Beschreibung |
---|---|---|
nswap | obj1 ... objn --> objn ... obj1 | Das n_te Element (0 = TOS) mit dem obersten auf dem Stack vertauschen. |
ndup | obj1 obj2 ... objn--> objn obj1 obj2 | Das n_te Element (0 = TOS) duplizieren und zuoberst auf dem Stack ablegen. |
ndrop | obj1 ... objn --> obj1 ... | Das n_te Element (0 = TOS) vom Stack entfernen. |
swap | obj1 obj2 --> obj2 obj1 | Die beiden obersten Elemente auf dem Stack vertauschen. |
dup | obj --> obj obj | Oberstes Element auf dem Stack duplizieren. |
drop | obj --> | Oberstes Element vom Stack entfernen. |
Aleph und Java
[Bearbeiten]Commands zur Verbindung von Aleph und Java. Diese Commands gestatten die Verwendung aller Komponenten aus Java. Es ist erforderlich die benötigten Klassen zu importieren.
Command | Stacksituation(en) | Beschreibung |
---|---|---|
set | string obj --> | In das (V2M) Field mit der Bezeichnung string wird obj gespeichert. Ähnlich dem Command is bei Variablen. |
field | string instance --> | Macht das field mit der Bezeichnung string aus instance der V2M zugänglich. Der Command-Name ist durch die nächste Zeichenkette bestimmt. Das Verhalten entspricht dem einer Variablen. |
method | instance string --> method | Macht die Methode mit der Bezeichnung string ausinstance der V2M zugänglich. Der Command-Name ist durch die nächste Zeichenkette bestimmt. Das Verhalten entspricht dem eines Commands. |
call | string instance --> [ obj ... ] | Methode mit der Bezeichnung string in der instance ausführen. Die Rückgabe der Methode wird auf dem Stack abgelegt, wenn nicht void. Das Verhalten ist dem von execute ähnlich. |
fetch | string instance --> obj | Inhalt des fields mit der Bezeichnung string in instance auf dem Stack ablegen. |
store | string instance obj --> | Das Objekt obj in das field mit der Bezeichnung string im instance speichern. |
build | creator --> instance | Ruft die Creator-Methode auf dem Stack auf und legt die instance auf dem Stack ab. |
creator | string class --> creator | Legt die Creator-Methode mit der Bezeichnung string der Klasse class auf dem Stack ab. |
instantiate | class --> instance | Erzeugt eine Instanz der Klasse class und legt sie auf den Stack. |
classify | string --> class | Legt die über string spezifizierte Klasse auf den Stack. |
Typecasting
[Bearbeiten]Commands zur Änderung der umgebenden Zahlenmenge. In herkömmlichen Sprachen "Typecasting" genannt. Weil Aleph keine Typen kennt, der Hinweis auf die relevante Zahlenmenge. Mathematisch besteht natürlich nur die Wahl zwischen Teilmengen aus ganzen oer rationalen Zahlen. Auf diese Feinheiten soll aber hier nicht näher eingegangen werden.
Command | Stacksituation(en) | Beschreibung |
---|---|---|
(double) | num --> double | Wandelt den Inhalt des numerische Symbols beliebigen Typs in den Java-Typ double. |
(float) | num --> float | Wandelt den Inhalt des numerische Symbols beliebigen Typs in den Java-Typ float. |
(long) | num --> long | Wandelt den Inhalt des numerische Symbols beliebigen Typs in den Java-Typ long. |
(int) | num --> int | Wandelt den Inhalt des numerische Symbols beliebigen Typs in den Java-Typ int. |
(short) | num --> short | Wandelt den Inhalt des numerische Symbols beliebigen Typs in den Java-Typ short. |
(byte) | num --> byte | Wandelt den Inhalt des numerische Symbols beliebigen Typs in den Java-Typ byte. |
Weitere Commands
[Bearbeiten]Diese Commands können keiner zusammenfassenden Aufstellung zugeordnet werden.
Command | Stacksituation(en) | Beschreibung |
---|---|---|
execute | command --> [ obj ... ] | Command auf dem Stack ausführen. Es kann Objekte auf dem Stack ablegen. |
find | string --> true command string --> false |
Eintrag string im Dictionary suchen. Wenn gefunden, wird das Command und ein true auf dem Stack abgelegt, sonst false. |
symbol | string --> true symbol string --> false |
Wenn string ein Aleph-Symbol sein könnte, dann das Symbol und true auf dem Stack ablegen, sonst false. |
environment | --> v2m | Die virtuelle Maschine V2M als Instanz ihrerselbst auf dem Stack ablegen. |
<< Installation | Sprachschatz | Alles ist Objekt >>