Dieser Befehl ist nur im Bereich eines SELECT-Befehls gültig und muß am Schluß aller "WHEN . . . THEN"-Anweisungen folgen. War keine der vorherigen WHEN-Klauseln zutreffend, wird die auf den Befehl OTHERWISE folgende Anweisung ausgeführt. In einem SELECT-Bereich ist ein OTHERWISE nicht unbedingt erforderlich. Allerdings kommt es zu einem Fehler, wenn die Klausel OTHERWISE weggelassen wird und keiner der WHEN-Befehle zutrifft. Beispiel:
SELECT
WHEN i=1 THEN say `eins'
WHEN i=2 THEN say `zwei'
OTHERWISE SAY `andere'
END
Der Befehl PARSE bietet einen Mechanismus zum Extrahieren einer oder mehrerer Teilzeichenfolgen aus einer Zeichenfolge und zum Zuweisen dieser Extrakte an Variablen. Die Eingabezeichenfolge kann aus verschiedenen Quellen stammen, z.B. aus Argumentzeichenfolgen, aus einem Ausdruck oder von der Konsole.
Die Syntaxanalyse (engl. Parsing) wird über eine Schablone gesteuert, die sich aus Symbolen, Zeichenfolgen, Operatoren und Klammern zusammensetzen kann. Die Schablone gibt sowohl die Variablen an, denen Werte zugewiesen werden sollen, als auch die Art der Begrenzung der Wertzeichenfolge. Während des Analysevorgangs wird die Zeichenfolge in Unterzeichenfolgen aufgeteilt, die dann den Variablensymbolen in der Schablone zugeordnet werden. Der Prozeß dauert an, bis allen Variablen in der Schablone ein Wert zugeordnet wurde. Wenn die Eingabezeichenfolge vorher "aufgebraucht" ist, erhalten die verbleibenden Variablen Nullwerte.
Wenn auf eine Variable in der Schablone unmittelbar eine weitere Variable folgt, wird die Wertzeichenkette durch Aufspalten der Eingabezeichenfolge in Wörter (getrennt durch Leerzeichen) festgelegt. Führende und abschließende Leerzeichen sind nicht zulässig. Jedes Wort wird einer Variablen in der Schablone zugewiesen. Normalerweise erhält dabei die letzte Variable den nicht tokensierten Rest der Eingabezeichenfolge, da auf sie kein Symbol folgt. Ein Platzhaltersymbol, ein Punkt (.), führt dazu, daß die Variable mit dem Punkt endet, sobald ein Leerzeichen im Eingabestrom vorkommt. Platzhalter verhalten sich wie Variablen, allerdings wird ihnen niemals ein Wert zugewiesen.
Die Schablone kann weggelassen werden, wenn der Befehl nur zur Auswertung einer Eingabezeichenfolge vorgesehen ist. Schablonen werden in Kapitel 7.1 beschrieben.
Das Ziel der Analyseoperation ist es, für jedes Variablensymbol in der Schablone einen Bezug zu einer aktuellen und einer nächsten Position herzustellen. Die Unterzeichenfolge zwischen diesen Positionen wird dann der Variablen als Wert zugeordnet:
Im folgenden finden Sie eine Beschreibung der verschiedenen Optionen zu diesem Befehl:
{COMMAND | FUNCTION} {0 | 1} AUFGERUFEN AUFGELÖST ERW
Die einzelnen Komponenten haben folgende Bedeutung:
- {COMMAND | FUNCTION} gibt an, ob das Programm als Kommando oder als Funktion aufgerufen wurde.
- {0 | 1} ist ein boolesches Kennzeichen und gibt an, ob eine Ergebniszeichenfolge von der Aufrufebene angefordert wurde.
- AUFGERUFEN steht für den Namen, unter dem dieses Programm aufgerufen wurde.
- AUFGELÖST bezeichnet den endgültigen Namen des Programms (nach der Auflösung).
- ERW steht für die bei Suchoperationen zu verwendende Dateinamenserweiterung (Standardwert ist "REXX").
- HOST gibt die ursprüngliche Host-Adresse für Kommandos an.
Die Option SOURCE gibt nun den vollständigen Pfadnamen der ARexx-Programmdatei zurück. Zuvor wurde lediglich ein relativer Namen angegeben, was zur Lokalisierung der Quelldatei des Programms nicht ausreichte.
Die Eingabezeichenfolge "VALUE Ausdruck WITH" ist Ergebnis des angegebenen Ausdrucks. Das Schlüsselwort WITH ist erforderlich, um den Ausdruck von der Schablone zu trennen. Das Resultat des Ausdrucks kann durch die Verwendung mehrerer Schablonen mehrmals analysiert werden, der Ausdruck selbst wird dagegen nicht neu ausgewertet.
Die Eingabeoption "VAR Variable" verwendet den Wert der angegebenen Variable als Eingabezeichenfolge. Bei Verwendung mehrerer Schablonen verwendet jede Schablone den aktuellen Wert der Variablen. Dieser Wert kann sich ändern, wenn die Variable zu den Zuweisungszielen in einer der Schablonen gehört.
Die Eingabeoption VERSION der aktuellen Konfiguration des ARexx-Interpreters wird im folgenden Format angegeben:
ARexx VERSION CPU MPU VIDEO FREQ
Die einzelnen Komponenten haben folgende Bedeutung:
/*Numerische Zeichenfolge ist:
"9 0 SCIENTIFIC"*/
PARSE NUMERIC DIGITS FUZZ FORM .
SAY digits /*9*/
SAY fuzz /*0*/
SAY form /*SCIENTIFIC*/
myvar = 1234567890
PARSE VAR myvar 1 a 3 b +2 c 1 d
SAY a
SAY b
SAY c
SAY d
Dieses Programm erzeugt folgende Ausgabe:
Der Befehl PROCEDURE wird in einer internen Funktion verwendet, um eine neue Symboltabelle zu erstellen. Dies verhindert, daß die Symbole, die in der Aufrufumgebung definiert sind, bei der Ausführung der Funktion verändert werden. PROCEDURE ist normalerweise die erste Anweisung innerhalb der Funktion, sie wäre aber auch an jeder anderen Stelle zulässig. Werden zwei PROCEDURE-Anweisungen innerhalb einer Funktion ausgeführt, kommt es zu einem Fehler.
Das Unterschlüsselwort EXPOSE bietet ein selektives Verfahren für den Zugriff auf die Symboltabelle der Aufrufebene und für die Weitergabe globaler Variablen an eine Funktion. Die auf das Schlüsselwort EXPOSE folgenden Variablen verweisen auf Symbole in der Symboltabelle der Aufrufebene. Spätere Änderungen dieser Variablen werden in der Umgebung der Aufrufebene berücksichtigt.
Die in der Liste EXPOSE aufgeführten Variablen können Stammsymbole oder zusammengesetzte Symbole enthalten. In diesem Fall ist die Reihenfolge der Variablen von Bedeutung. Die EXPOSE-Liste wird von links nach rechts verarbeitet, zusammengesetzte Symbole werden auf der Basis der für die neue Generation geltenden Werte erweitert. Nehmen wir beispielsweise an, daß der Wert des Symbols J in der vorherigen Generation 123 betrug und daß J in der neuen Generation nicht initialisiert ist. Dann macht die Anweisung PROCEDURE EXPOSE J A.J die Symbole J und A.123 zugänglich, PROCEDURE EXPOSE A.J J dagegen A.J und J. Die Offenlegung eines Stamms bewirkt, daß auch alle möglichen, von diesem Stamm abgeleiteten zusammengesetzten Symbole exponiert werden. Die Anweisung PROCEDURE EXPOSE A. exponiert also A.I, A.J, A.J.J, A.123 usw. Beispiel:
fakult: PROCEDURE /*Eine rekursive
Funktion*/
ARG i
IF i = 1
THEN RETURN 1
ELSE RETURN i * fakult (i-1)
Pull ist die Kurzform des Befehls PARSE UPPER PULL. Er liest eine Zeichenfolge von der Eingabekonsole ein, setzt sie in Großbuchstaben um und analysiert sie mit Hilfe der Schablone. Bei Angabe zusätzlicher Schablonen können mehrere Zeichenfolgen gelesen werden. Der Befehl liest auch dann von der Konsole, wenn keine Schablone zur Verfügung steht. (Schablonen werden in Kapitel 7.1 beschrieben.) Beispiel:
PULL Vorname Nachname . /*Name lesen*/
Der Befehl PUSH dient dazu, einen Datenstrom so aufzubereiten, daß er von einer Kommando-Shell oder einem anderen Programm gelesen werden kann. Er fügt ein Zeichen für Zeilenvorschub an das Ergebnis des Ausdrucks an und stellt ihn dann in der Stapel des STDIN-Datenstroms. Stapelzeilen werden nach der Regel "last-in, first-out" (was zuletzt eingegeben wurde, wird zuerst ausgegeben) in den Datenstrom gestellt und können gelesen werden, als ob sie interaktiv eingegeben worden wären. Nach Ausgabe der Befehle:
PUSH Zeile 1
PUSH Zeile 2
PUSH Zeile 3
würde der Datenstrom in der Reihenfolge Zeile 3, 2, 1 gelesen.
PSUH ermöglicht, daß der STDIN-Datenstrom als privates "Konzeptpapier" zur Vorbereitung von Daten für die spätere Verarbeitung eingesetzt wird. Es könnten z.B. mehrere Dateien mit Einfügung von Begrenzungszeichen verkettet werden, indem einfach die Eingabedateien gelesen, mit PUSH in den Datenstrom gestellt werden und die Begrenzungszeichen bei Bedarf eingefügt werden. Beispiel:
DO i=1 to 5
PUSH `echo "Zeile `i'"'
END
|
|