Token sind die kleinsten separaten Einheiten der Programmiersprache ARexx. Sie können aus einem oder mehreren Zeichen bestehen. Token können in fünf Kategorien unterteilt werden:
Jede Gruppe von Zeichen, die mit der Sequenz /* beginnt und mit */ endet, bildet einen Kommentar. Jedes ARexx-Programm muß mit einem Kommentar beginnen. Zu jedem /* muß ein entsprechendes */ vorhanden sein. Beispiel:
/*Ein einfacher Kommentar in ARexx*/
Kommentare können überall im Programm plaziert und auch ineinander verschachtelt werden. Beispiel:
/*Ein /*verschachtelter*/ Kommentar*/
Es empfiehlt sich, Programme mit zahlreichen Kommentaren auszustatten, die Ihnen und anderen Benutzern Zweck und Funktion des jeweiligen Programms in Erinnerung rufen. Der Kommandointerpreter ignoriert Kommentare beim Lesen der Programmdateien - die Kommentare können also keine Verzögerung der Programmausführung auslösen.
Unter einem Symbol versteht man eine beliebige Gruppe der Zeichen a-z, A-Z, 0-9 sowie Punkt (.), Ausrufezeichen (!), Fragezeichen (?), Dollarzeichen ($) und Unterstreichung (_). Wenn der Interpreter ein Programm durchliest, werden Symbole in Großbuchstaben übersetzt. Das Symbol MeinName entspricht also MEINNAME. Vier Symbolarten werden erkannt:
Einfache, zusammengesetzte und Stammsymbole werden als Variablen bezeichnet. Ihnen kann während des Programmlaufs ein Wert zugewiesen werden. Solange eine Variable noch nicht mit einem Wert besetzt ist, ist sie nicht initialisiert. Für nicht initialisierte Variablen wird als Wert der Variablenname selbst (ggf. übersetzt in Großbuchstaben) verwendet.
Zusammengesetzte und Stammsymbole besitzen besondere Eigenschaften, die sie besonders für den Aufbau von Variablenfeldern und Listen prädestinieren. Stammsymbole ermöglichen die Initialisierung einer ganzen Klasse zusammengesetzter Symbole. Ein zusammengesetztes Symbol hat die Struktur Stamm.n1.n2. . . nk, (Zahlen runtersetzen) wobei der Ausgangsname ein Stammsymbol ist und jeder Knoten, n1 ... nk, (Zahlen runtersetzen) ein festes oder einfaches Symbol.
Wenn ein Stammsymbol ein Wert zugeordnet wird, ordnet es seinerseits diesen Wert allen vom Stammsymbol abgeleiteten, zusammengesetzten Symbolen zu. Der Wert eines zusammengesetzten Symbols hängt also von den zuvor auf dieses Symbol oder den dazugehörigen Stamm erfolgten Zuordnungen ab.
Wenn ein zusammengesetztes Symbol in einem Programm vorkommt, wird sein Name erweitert, indem jeder Knoten durch seinen aktuellen Wert ersetzt wird. Die Wertzeichenfolge kann aus beliebigen Zeichen bestehen (einschließlich eingefügter Leerzeichen) und wird nicht in Großbuchstaben umgewandelt. Resultat der Erweiterung ist ein neuer Name, der anstelle des zusammengesetzten Symbols verwendet wird. Hat z.B. J den Wert 3 und K den Wert 7, wird das zusammengesetzte Symbol A.J.K zu A.3.7 erweitert.
Zusammengesetzte Symbole können als eine Form zuordnungsabhängigen oder inhaltsadressierbaren ("assoziativen") Speichers betrachtet werden. Nehmen wir einmal an, Sie müssen eine Reihe von Namen und Telefonnummern speichern und abrufen. Die normale Vorgehensweise wäre nun, zwei Felder (NAME und NUMMER) einzurichten und jedem eine Indexnummer (1 bis n, mit n = Gesamtanzahl der Einträge) zu geben. Eine Nummer würde gesucht, indem man das Namensfeld durchliest, bis der gewünschte Name gefunden wird, z.B. NAME.12, dessen Telefonnummer NUMMER.12 dann im anderen Feld abgelesen werden kann. Arbeitet man mit zusammengesetzten Symbolen, könnte das Symbol NAME den abzurufenden Namen enthalten, und NUMMER.NAME würde zur dazugehörigen Telefonnummer erweitert, z.B. NUMMER.CBM.
Zusammengesetzte Symbole können auch als gewöhnliche indizierte Felder verwendet werden, die den zusätzlichen Vorteil bieten, daß nur eine Zuweisung (auf den Stamm) erforderlich ist, um die gesamte Feldgruppe zu initialisieren. Das Programm im folgenden Beispiel verwendet die Stämme "nummer." Und "adr." Zur Erstellung eines elektronischen Telefonverzeichnisses.
/*Telefonverzeichnis zur Veranschaulichung
zusammengesetzter Variablen.*/
IF ARG() (Tilde) = 1 THEN DO
SAY "VERWENDUNG: rx TelNr Name"
EXIT 5
END
/*Zur Anzeige von Telefonnummern/Adressen Fenster öffnen.*/
CALL OPEN out, "con:0/0/640/60/ARexx Phonebook"
IF (Tilde) result THEN DO
SAY "Öffnen gescheitert ... Sorry"
EXIT 10
END
/*Nummerndefinitionen*/
nummer. = `(nicht gefunden)'
nummer.wsh = `(555) 001-0001'
adr. = `(nicht gefunden)'
nummer.CBM = `(555) 002-0002'
adr.CMB = `1200 Wilson Dr., West Chester, PA, 19380'
/*(Eigentliche Arbeit schon getan)*/
ARG name /*Der Name*/
CALL WRITELN out,name || "TelNr ist" nummer.name
CALL WRITELN out,name | | "Adresse ist" adr.name
CALL WRITELN out, "Mit Eingabetaste Programm verlassen."
CALL READLN out
EXIT
Zum Aufrufen des Programms rufen Sie ein Shell-Fenster auf und geben folgendes ein:
Es erscheint ein Fenster mit dem CBM zugeordneten Namen und der Adresse.
Eine Zeichenfolge ist eine beliebige Gruppe von Zeichen, an deren Anfang und Ende einfache (`) oder doppelte (") Anführungszeichen als Begrenzungszeichen stehen. Am Ende der Zeichenfolge muß allerdings immer das gleiche Begrenzungszeichen stehen wie am Anfang. Wenn das Begrenzungszeichen selbst Bestandteil der Zeichenfolge sein soll, muß es zweimal nacheinander angegeben werden (`' oder ""). Beispiel:
"Hallo Kumpel,"
`haste mal `'ne Mark?'
Der Wert einer Zeichenfolge ist die Zeichenfolge selbst. Die Länge einer Zeichenfolge wird durch die Anzahl der Zeichen bestimmt. Wenn die Zeichenfolge keine Zeichen enthält, wird sie als leere Zeichenfolge (Nullzeichenfolge) bezeichnet.
Wenn auf eine Zeichenfolge unmittelbar ein X oder B folgt, handelt es sich um eine hexadezimale bzw. binäre Zeichenfolge. Sie muß sich aus hexadezimalen (0-9, A-F) bzw. binären Ziffern (0,1) zusammensetzen. Beispiel:
Leerzeichen sind an Bytegrenzen aus Gründen der Übersichtlichkeit zulässig. Hexadezimale und binäre Zeichenfolgen eignen sich besonders für nicht im ASCII-Code definierte Zeichen und für maschinenspezifische Informationen, z.B. Adressen in einem Programm. Sie werden umgehend in die gepackte (komprimierte), maschineninterne Form umgewandelt.