REXX


REXX
REXX
Erscheinungsjahr: 1979
Entwickler: Mike Cowlishaw
Aktuelle Version: ANSI X3.274  (1996)
Typisierung: dynamisch
Einflüsse: EXEC 2
Betriebssystem: z/OS, Windows, Linux, AIX, OS/2, PC-DOS, OS/400, AmigaOS, uvm.

REXX (Abkürzung für Restructured Extended Executor) ist eine von Mike Cowlishaw bei IBM entwickelte Skriptsprache.

Inhaltsverzeichnis

Herkunft

REXX 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 DLLs 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 Konzepte

Alles ist ein String

In 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 a mit 100 „multipliziert“; das Ergebnis, die Zeichenkette 200, kann sofort wieder als Zahl verwendet werden. Ausgegeben wird 100.

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 a und '00' führen hingegen dazu, dass bei der impliziten Verkettung ein Leerzeichen eingefügt wird, was unerwünscht ist, wenn das Ergebnis eine Zahl sein soll.

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 3 aus.

Im Normalfall rechnet Rexx auf neun Dezimalstellen genau; durch Angabe einer höheren Anzahl kann jedoch fast beliebig genau gerechnet werden. Es liegt nahe, dass diese wenig hardwarenahe Methode Rexx nicht unbedingt als Sprache für sehr rechenintensive Probleme prädestiniert.

Auswertungslogik

Rexx 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 dir x zur Standardausgabe ausgegeben wird. Das Schlüsselwort say fungiert hier jedoch nur als Marke; der Ausdruck funk('dir x') bildet schon die nächste Anweisung. Gemäß Regel 4 (siehe unten) wird also funk aufgerufen und dir x zur Ausführung an die Umgebung übergeben. (Es ginge natürlich auch ohne die Funktion funk; dies nur als sehr einfaches Beispiel für einen Funktionsaufruf)

Es ist auch möglich, mit signal value Ausdruck eine bestimmte Marke anzusteuern; dies ist eher unüblich und nur in bestimmten Fällen sinnvoll, z. B. als Alternative zu sehr großen select-Anweisungen.

3. Wenn das erste Token ein Schlüsselwort ist, erfolgt die Auswertung entsprechend dieser Schlüsselwortanweisung

Solche Schlüsselwörter sind z. B. if, do, say. Man beachte, dass die Auswertung der Schlüsselwörter erst an dritter Stelle günstig im Hinblick auf zukünftige Erweiterungen ist. Zukünftige Versionen der Sprache können so neue Schlüsselwörter einführen, ohne dass existierende Programme überarbeitet werden müssen, sowohl Variablen als auch Marken können ihren Namen behalten.

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 dir eine Variable; wurde ihr kein Wert zugewiesen, so ist ihr Wert DIR (ihr Name in Großbuchstaben), und es wird DIR an die Umgebung übergeben und ausgeführt. Im zweiten Fall wird garantiert dir übergeben und ausgeführt.

Es könnte natürlich sein, dass eine zukünftige Rexx-Version ein Schlüsselwort dir einführt. Um sicherzugehen, dass das Programm auch dann noch funktioniert, kann z. B. durch

''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

Weblinks

Wikibooks Wikibooks: REXX – Lern- und Lehrmaterialien

Wikimedia Foundation.

Schlagen Sie auch in anderen Wörterbüchern nach:

  • REXX — Saltar a navegación, búsqueda REXX Paradigma: multiparadigma Apareció en: 1979 Diseñado por: Mike Cowlishaw Desarrollador: Mike Cowlishaw e IBM Última versión: ANSI X3.27 …   Wikipedia Español

  • Rexx — (Abk. f. Restructured Extended Executor) ist eine von Mike Cowlishaw bei IBM entwickelte Skriptsprache. Inhaltsverzeichnis 1 Herkunft 2 Grundlegende Konzepte 2.1 Alles ist ein String 2.2 Auswertungslogik …   Deutsch Wikipedia

  • REXX — или Rexx (REstructured eXtended eXecutor, произносится «рекс»)  интерпретируемый язык программирования, разработанный фирмой IBM. Существуют как коммерческие, так и свободно распространяемые реализации данного языка. Пик своего… …   Википедия

  • REXX —   [Abk. für Restructured Extended Executor, dt. »umstrukturierter erweiterter Durchführer«], eine von Mike F. Cowlishaw um 1980 bei IBM entwickelte prozedurale Programmiersprache (prozedurale Sprache), die leicht zu erlernen und einfach zu… …   Universal-Lexikon

  • REXX — (REstructured eXtended eXecutor) es un lenguaje de programación desarrollado en IBM por Michael Cowlishaw del que existen numerosas implementaciones disponibles con código abierto. Es un lenguaje de programación estructurado de alto nivel… …   Enciclopedia Universal

  • REXX — Infobox programming language name = REXX paradigm = multiparadigm: object oriented, procedural, structured year = 1979 designer = Mike Cowlishaw developer = Mike Cowlishaw IBM latest release version = ANSI X3.274 latest release date = 1996 typing …   Wikipedia

  • REXX — Restructured Extended Executor Restructured Extended Executor (REXX) est un langage, initialement Revised EXecutor, mais le sigle était déjà déposé, a été inventé par Mike Cowlishaw, chercheur d IBM. Langage interprété procédural, il est un des… …   Wikipédia en Français

  • Rexx — Restructured Extended Executor Restructured Extended Executor (REXX) est un langage, initialement Revised EXecutor, mais le sigle était déjà déposé, a été inventé par Mike Cowlishaw, chercheur d IBM. Langage interprété procédural, il est un des… …   Wikipédia en Français

  • REXX — ● sg. np. m. ►LANG REstructured eXtended eXecutor language... attaque! Langage de commande d OS/2. Pour faire un bon Rexx, prendre un shell Unix convenable, et remplacer tous les noms de commandes par des trucs à vous pour dérouter tout le monde …   Dictionnaire d'informatique francophone

  • REXX —    Acronym formed from Restructured Extended Executor Language. A scripting language from IBM, originally written by Mike Cowlishaw of IBM UK in 1979 for the VM mainframe environment and now available on many operating systems, including OS/2,… …   Dictionary of networking