REXX
REXX (Restructured Extended Executor) ist eine von Mike Cowlishaw bei IBM entwickelte Skriptsprache. HerkunftREXX stammt aus dem Großrechnerbereich. Mike Cowlishaw hatte es in den 1980er Jahren als Nachfolger der Skriptsprache EXEC 2 unter VM zuerst implementiert (der Unterschied zwischen dem relativ simplen und nicht sehr mächtigen EXEC-2 und REXX ist ähnlich groß wie der zwischen der MS-DOS Batch-Sprache und BASIC). REXX steht dabei für „Restructured EXtended eXecutor“ (Language). REXX wurde auf TSO und andere Umgebungen wie OS/2 portiert. Eine angepasste Version – genannt ARexx – erfreut sich seit 1987 auch auf dem Amiga großer Beliebtheit, da beinahe jedes wichtige Programm damit „fernsteuerbar“ ist. Mittlerweile sind auch Interpreter für fast alle Umgebungen bis hin zum Palm OS erhältlich. 1996 wurde REXX zum ANSI-Standard (ANSI X3.274-1996 „Information Technology – Programming Language REXX“). REXX kann besonders leicht erweitert werden, indem dynamische Programmbibliotheken zum eigentlichen Interpreter hinzugeladen werden. Insbesondere unter OS/2 ist eine Vielfalt solcher Bibliotheken mit mathematischen, Datenbank-, Socket- und System-Funktionen verfügbar, die wie normale REXX-Funktionen angesprochen werden können. REXX ist in der Regel eine interpretierte Sprache, aber für Linux und für IBM-Großrechner-Betriebssysteme sind auch REXX-Compiler verfügbar. Grundlegende KonzepteAlles ist ein StringIn klassischem Rexx (im Unterschied zum hier nicht behandelten, jedoch kompatiblen Objektorientierten Rexx) ist jeder Wert ein String – auch Zahlen. Es ist also ohne weiteres möglich, Zahlenwerte mit String-Manipulationen zu ändern und das Ergebnis sofort wieder als Zahl zu verwenden: a = 2
a = a || '00'
say a / 2
Durch Anhängen zweier Nullen wird Folgerichtig ist die Arbeit mit Strings in Rexx sehr einfach. Die obige Verkettungsoperation kann auch als a = a'00'
geschrieben werden. Ein oder mehrere Leerzeichen zwischen Wenn eine Zahl benötigt wird, weil der verwendete Operator mit Zahlen arbeitet, versucht Rexx, den vorliegenden Wert als Zahl zu interpretieren: say ' 1' + 2
gibt Im Normalfall rechnet Rexx auf neun Dezimalstellen genau; durch Angabe einer höheren Anzahl kann jedoch fast beliebig genau gerechnet werden. Diese wenig hardwarenahe Methode von Rexx führt dazu, dass arithmetische Operationen vergleichsweise langsam ausgeführt werden. AuswertungslogikRexx wurde unter anderem entwickelt, um auf einfache Weise Kommandos an eine Umgebung absetzen zu können. Dies wird unterstützt durch die folgende Strategie bei der Auswertung einer Anweisung, welche Rexx-Programme unempfindlich gegenüber neu eingeführten Schlüsselwörtern macht und die ein Alleinstellungsmerkmal der Sprache darstellt: 1. Wenn das zweite Token mit einem Gleichheitszeichen beginnt, handelt es sich um eine Wertzuweisung Hieraus folgt, dass z. B. if = 1
eine gültige Anweisung ist, die der Variablen IF den Wert 1 zuweist! Hingegen wäre if == 1
zwar ein gültiger logischer Ausdruck, der prüft, ob die Variable if exakt den Wert 1 hat; als eigenständige Anweisung ergibt sie jedoch einen Syntaxfehler, weil der zuzuweisende Wert = 1 eben kein gültiger Ausdruck ist. 2. Ist das zweite Token ein Doppelpunkt, handelt es sich um eine Marke Marken werden benötigt, um Prozeduren und Funktionen zu realisieren; diese notiert man in Rexx nach dem „ausführbaren Teil“ des Programms. Beispiel: say: funk('dir x')
exit
funk: return Arg(1)
Man könnte erwarten, dass Es ist auch möglich, mit 3. Wenn das erste Token ein Schlüsselwort ist, erfolgt die Auswertung entsprechend dieser Schlüsselwortanweisung Solche Schlüsselwörter sind z. B. 4. In jedem anderen Fall wird die Anweisung als Ausdruck ausgewertet und das Ergebnis an die Umgebung übergeben Dies bedeutet, dass die folgende Rexx-Anweisung (unter DOS, Windows, OS/2, …) den Inhalt des aktuellen Verzeichnisses ausgibt: dir
oder auch: 'dir'
Im ersten Fall ist Es könnte sein, dass eine zukünftige Rexx-Version ein Schlüsselwort ''dir
erzwungen werden, dass die Anweisung als Ausdruck (Verkettung der Variablen mit dem Leerstring) erkannt wird; oder man verwendet einfach die Variante, das Kommando als Stringkonstante zu übergeben. Literatur
WeblinksCommons: REXX – Sammlung von Bildern, Videos und Audiodateien
Wikibooks: REXX – Lern- und Lehrmaterialien
|