Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Anweisungssyntax

&pagelevel(3)&pagelevel

In diesem Abschnitt werden die grundlegenden Konzepte bei der Syntaxanalyse von EDT-Anweisungen erläutert.

Wegen der unterschiedlichen Behandlung muss der EDT bei jeder Eingabe zuerst entscheiden, ob es sich um eine Dateneingabe oder um eine EDT-Anweisung handelt (es können auch mehrere EDT-Anweisungen sein, im F-Modus durch Semikolons (;), im L-Modus bei eingeschaltetem BLOCK-Modus durch [LZE]-Zeichen voneinander getrennt).

Im F-Modus trifft der EDT diese Entscheidung an Hand des Eingabeorts. Eingaben in der Anweisungszeile interpretiert der EDT grundsätzlich als EDT-Anweisung, Eingaben im Datenfenster dagegen als Dateneingaben und Eingaben in der Kurzanweisungsspalte als Kurzanweisungen. Ähnliches gilt für die Unterprogramm-Schnittstelle, wo die Eingabe von EDT-Anweisungen bzw. Daten in jeweils eigens dafür vorgesehenen Eingabebereichen zu erfolgen hat.

Im L-Modus dagegen erfolgen alle Eingaben in einer Zeile. Um im L-Modus Dateneingaben von EDT-Anweisungen unterscheiden zu können, müssen bei der Eingabe im L-Modus alle EDT-Anweisungen mit dem EDT-Anweisungssymbol (standardmäßig @) beginnen.
Im F-Modus und an der Unterprogramm-Schnittstelle darf das EDT-Anweisungssymbol auch weggelassen werden, da dort keine Verwechslungsgefahr mit Dateneingaben besteht.

Im L-Modus ist noch folgende Besonderheit zu beachten.
Beginnt eine Eingabe mit zwei EDT-Anweisungssymbolen (@@, wobei jeweils vor und nach dem ersten @ ein oder mehrere Leerzeichen stehen dürfen), interpretiert der EDT diese Eingabe als Dateneingabe, wobei das zweite EDT-Anweisungssymbol als erstes Zeichen der Dateneingabe gilt. Alle Zeichen (erstes EDT-Anweisungssymbol und alle Leerzeichen), die vor dem zweiten EDT-Anweisungssymbol stehen, schneidet der EDT ab. Damit können im L-Modus auf einfache Weise Zeilen mit EDT-Anweisungen in EDT-Prozeduren geschrieben werden (wenn eine Eingabe nur mit einem EDT-Anweisungssymbol beginnt, wird sie sofort als EDT-Anweisung ausgeführt und nicht in eine Zeile geschrieben). Im L-Modus wird eine Dateneingabe also nur dann als Anweisung interpretiert, wenn das erste von einem Leerzeichen verschiedene Zeichen das EDT-Anweisungssymbol ist und das erste von einem Leerzeichen verschiedene Zeichen, das dem EDT-Anweisungssymbol folgt, kein EDT-Anweisungssymbol ist.

Das eben Gesagte gilt auch in gleicher Weise für Benutzeranweisungssymbole. Beginnt eine Eingabe mit zwei gleichen Benutzeranweisungssymbolen, so wird diese Eingabe als Dateneingabe interpretiert, wobei das zweite Benutzeranweisungssymbol als erstes Zeichen der Dateneingabe gilt. Beginnt dagegen die Eingabe mit einem Benutzeranweisungssymbol oder mit zwei verschiedenen Benutzeranweisungssymbolen, so wird alles nach dem ersten Benutzeranweisungssymbol (Leerzeichen werden überlesen) als Benutzeranweisung interpretiert und ausgeführt.

Einige EDT-Anweisungen (z.B. @SET, Format 6) haben den Operanden text (siehe Abschnitt „Operandensyntax“). Dieser Operand text, der aus Sicht des EDT wie eine eigenständige Eingabe behandelt wird, kann nun selbst wieder entweder eine EDT-Anweisung oder eine Dateneingabe sein. Welche der beiden Möglichkeiten zutrifft, entscheidet der EDT nach den für den L-Modus gültigen Regeln.

Hat der EDT eine Eingabe als EDT-Anweisung erkannt, so wird zunächst für den Fall, dass die Eingabe aus mehreren EDT-Anweisungen besteht, die jeweils erste, noch nicht bearbeitete EDT-Anweisung der Eingabe separiert. Im F-Modus geschieht dies an Hand des Semikolons, wobei Semikolons in Literalen bei der Zerlegung nicht berücksichtigt werden, bzw. im L-Modus an Hand des [LZE]-Zeichens. Die (separierte) EDT-Anweisung wird dann in zwei interne Puffer kopiert. Einer der beiden Puffer enthält dann die EDT-Anweisung so, wie sie eingegeben wurde, während der andere Puffer zur Vereinfachung der Erkennung von Anweisungsnamen und Operanden in Großbuchstaben konvertiert wird.

Als nächstes versucht der EDT den Anweisungsnamen zu ermitteln. Konnte die Erkennung des Anweisungsnamens erfolgreich durchgeführt werden und handelt es sich um eine EDT-Anweisung mit indirekter Operandenangabe (siehe Abschnitt „Indirekte Angabe von Operanden“), so werden die Operanden nun in den beiden internen Puffern eingesetzt, wobei in einem der beiden Puffer in diesem Fall noch einmal eine Konvertierung in Großbuchstaben erfolgt.

Nun folgt die syntaktische Prüfung der EDT-Anweisung.
Bei der Analyse von EDT-Anweisungen wird bei denjenigen Teilen einer EDT-Anweisung, bei denen die Unterscheidung zwischen Groß- und Kleinschreibung relevant ist, z.B. Literale, auf die ursprünglich eingegebene EDT-Anweisung zurückgegriffen.
Eine Interpretation von Unicode-Ersatzdarstellungen findet bei EDT-Anweisungen nur innerhalb von Literalen (außer bei @DO und @PARAMS) statt.
Außerdem wird innerhalb von EDT-Anweisungen keine Tabulatorexpansion durchgeführt. Treten keine Syntaxfehler auf, so wird die EDT-Anweisung anschließend ausgeführt und danach wird die ursprünglich eingegebene EDT-Anweisung in den Anweisungspuffer eingetragen (indirekte Operanden sind dort nicht aufgelöst).

Eine EDT-Anweisung beginnt mit einem Anweisungsnamen (z.B. @OPEN, @COPY, @WRITE), dem ein oder mehrere Operanden folgen können. Bei einigen EDT-Anweisungen ist nach den Operanden auch noch ein Kommentar erlaubt. Vor dem EDT-Anweisungssymbol sowie zwischen dem EDT-Anweisungssymbol und dem Anweisungsnamen sind ein oder mehrere Leerzeichen zulässig (aber nicht nötig).

Hat eine EDT-Anweisung Operanden, so folgen diese, evtl. durch ein oder mehrere Leerzeichen getrennt, dem Anweisungsnamen. Die Operanden sind in der vorgegebenen Reihenfolge anzugeben. Vor bzw. nach jedem Operanden können beliebig viele Leerzeichen eingegeben werden. Es gibt Operanden, die immer angegeben werden müssen, andere Operanden sind aber auch optional.

Werden optionale Operanden weggelassen, so werden für diese Operanden Standardwerte angenommen. Welche Operanden optional sind und welche nicht und welches die Standardwerte für weggelassene optionale Operanden sind, ist der Syntaxbeschreibung der jeweiligen Anweisung zu entnehmen.

Die Leerzeichen zwischen Anweisungsnamen und Operanden bzw. zwischen den einzelnen Operanden können auch entfallen. Sie müssen jedoch dann angegeben werden, wenn Anweisungsname und Operand bzw. zwei aufeinander folgende Operanden sonst nicht unterscheidbar sind.

Beispiel

@SYMBOLS='?' ist falsch; richtig ist @SYMBOL S='?', da @SYMBOL eine zulässige Abkürzung der Anweisung @SYMBOLS ist.

Das Weglassen von Leerzeichen zwischen Anweisungsnamen und Operanden bzw. zwischen den einzelnen Operanden wird generell nicht empfohlen, da die Lesbarkeit einer Anweisung unter Umständen stark beeinträchtigt wird.

Neben der soeben beschriebenen direkten Angabe von Operanden kann man diese auch indirekt über eine Zeichenfolgevariable angeben. Damit hat man z.B. die Möglichkeit, Operanden erst zur Laufzeit festzulegen, was eine wesentlich größere Flexibilität insbesondere in EDT-Prozeduren erlaubt. Diese Möglichkeit der Operandenangabe ist genauer im Abschnitt „Indirekte Angabe von Operanden“ beschrieben.

Bei einigen Anweisungen ist nach den Operanden, sofern vorhanden, auch noch ein Kommentar erlaubt. Ob bei einer Anweisung ein Kommentar zulässig ist, kann der Syntaxbeschreibung der jeweiligen Anweisung entnommen werden.

Die meisten EDT-Anweisungen können abgekürzt werden. Die Abkürzung entsteht in der Regel durch Weglassen von einem oder mehreren Zeichen am Ende des Anweisungsnamens. In einigen Fällen gibt es aber auch Abkürzungen, die nicht durch Weglassen von Zeichen entstehen. Die Anweisung @BLOCK kann z.B. auch mit @BK, die Anweisung @QUOTE auch mit @QE und die Anweisung @SETF kann im F-Modus auch mit dem Zeichen # abgekürzt werden. Bei der Anweisung @SEARCH-OPTIONS können auch einige Zeichen in der Mitte des Anweisungsnamens weggelassen werden, so dass z.B. @SEA aber auch @SEA-OPTIONS gültige Abkürzungen für diese Anweisung sind. Eine Ausnahme ist noch die Anweisung @SET, bei der der Anweisungsname sogar vollständig entfallen kann. Bei @SET (Format 6) muss dann allerdings auch im F-Modus und an der Unterprogramm-Schnittstelle das Anweisungssymbol angegeben werden, um Eindeutigkeit herzustellen. Der Teil des Anweisungsnamens, der mindestens vorhanden sein muss, damit die Anweisung vom EDT eindeutig erkannt werden kann, ist in den Syntaxdiagrammen jeweils durch Fettdruck hervorgehoben.

Ausgehend von den kürzest möglichen Abkürzungen versucht der EDT, den Anweisungsnamen eindeutig zu identifizieren. Bei Erfolg werden eventuell noch vorhandene weitere Zeichen des Anweisungsnamens überlesen. Dies wird solange fortgesetzt, bis entweder der vollständige Anweisungsname abgearbeitet ist oder ein Zeichen erkannt wird, welches nicht mehr zum Anweisungsnamen passt (dies kann auch ein Leerzeichen sein). Das erste von einem Leerzeichen verschiedene Zeichen, das nicht mehr zum Anweisungsnamen passt, wird, sofern vorhanden, als erstes Zeichen des Operandenteils interpretiert.

Bei drei Paaren von Anweisungen (@DELETE/@DELIMIT, @PAR/@PARAMS und @UNSAVE/@UPDATE) reicht die Analyse des Anweisungsnamens nicht aus, um eine Anweisung eindeutig zu identifizieren, da die kürzesten möglichen Abkürzungen jeweils identisch sind (@D, @PAR bzw. @U). In diesen drei Fällen wird das erste Zeichen des Operandenteils zur Unterscheidung herangezogen. Bei der Anweisung @DELIMIT beginnt z.B. der Operandenteil mit dem Zeichen =, in der Anweisung @DELETE dagegen kommt dieses Zeichen im Operandenteil nicht vor (bei der Anweisung @PARAMS ist das Zeichen & das erste Zeichen des Operandenteils und bei der Anweisung @UNSAVE das Zeichen ', das bei der jeweils anderen Anweisung nicht im Operandenteil vorkommt).

Beispiel

Wir betrachten die Eingabe @DEL& (Leerzeichen zwischen dem Anweisungsnamen und dem Operandenteil können ja weggelassen werden). Die Abkürzungen @DIALOG, @DO und @DR (für @DROP) passen nicht. Es bleibt nur noch die Abkürzung @D übrig, die aber in gleicher Weise für die Anweisung @DELETE oder die Anweisung @DELIMIT stehen kann. Die Anweisung @DELIMIT scheidet aber aus, da in der restlichen Anweisung das Zeichen = nicht vorkommt. Damit steht @DELETE als Anweisungsname fest. Nun werden in der Eingabe noch die Zeichen E und L überlesen, da sie mit den entsprechenden Zeichen im Anweisungsnamen übereinstimmen. Das Zeichen & stimmt dagegen nicht mehr mit dem entsprechenden Zeichen (E) im Anweisungsnamen überein und ist deshalb das erste (und in diesem Fall auch das einzige) Zeichen des Operandenteils.

Auf Grund der soeben beschriebenen Vorgehensweise bei der Anweisungsanalyse kann auch erklärt werden, warum manchmal nicht immer gleich nachvollziehbare Fehlermeldungen ausgegeben werden.
Wenn in einer Eingabe keine Anweisung identifiziert werden kann, wird die Meldung EDT3101 (Unzulässige Anweisung) ausgegeben (z.B. @XD). Es gibt jedoch viele Situationen, wo man eigentlich die Ausgabe der Meldung EDT3101 erwarten würde, wo aber stattdessen die Meldung EDT3002 (Operanden-Fehler) ausgegeben wird. Angenommen, man hätte in dem vorangegangenen Beispiel statt @DEL& versehentlich @DDL& eingegeben. Genau wie vorher wäre die Anweisungsanalyse zu dem Ergebnis gekommen, dass es sich um eine @DELETE-Anweisung handelt (@DELIMIT scheidet ja nach wie vor wegen des fehlenden Zeichens = aus). Aber bereits das nächste Zeichen in der Eingabe nach @D unterscheidet sich von dem entsprechenden Zeichen im Anweisungsnamen @DELETE. Also wird alles ab diesem Zeichen als zum Operandenteil gehörig betrachtet (DL&). Die Zeichenfolge DL& ist jedoch für keines der drei Formate der @DELETE-Anweisung als ein zulässiger Operand interpretierbar, weshalb folgerichtig die Meldung EDT3002 ausgegeben wird.

Hinweise

  • Die Begrenzersymbole für Literale (standardmäßig die Zeichen ' und ") können mit der Anweisung @QUOTE umdefiniert werden. Bei den Anweisungen @DO und @PARAMS wird jedoch, ungeachtet einer eventuell mit der Anweisung @QUOTE vorgenommenen Umdefinition, als Begrenzersymbol für Literale immer das Zeichen 'verwendet.

  • Innerhalb von @DO-Prozeduren erfolgt die Anweisungsanalyse erst nach der Ersetzung der Prozedurparameter. Erst dann wird auch eine eventuelle indirekte Operandenangabe aufgelöst.

  • Es ist nicht erlaubt, in den Schlüsselwörtern von Anweisungen Leerzeichen einzustreuen oder am Ende von Anweisungen Kommentare anzuhängen (Kommentare sind am Ende einer Anweisung nur erlaubt, wenn dies in der Syntaxbeschreibung explizit angegeben ist).

  • Mit der Anweisung @SYNTAX TESTMODUS=ON wird der Test-Modus aktiviert. EDT-Anweisungen werden in diesem Fall im L-Modus bis auf einige Ausnahmen nicht mehr ausgeführt, sondern nur noch syntaktisch geprüft. Damit lassen sich z.B. EDT-Prozeduren vor deren Einsatz hinsichtlich ihrer Ablauffähigkeit prüfen (genaueres siehe Anweisung @SYNTAX, "@SYNTAX - Einstellen des Test-Modus ").