Zurück Weiter Kapitel

Beispiele zur Syntaxanalyse

Syntaxanalyse durch Tokenisierung

Computerprogramme zerlegen eine Zeichenfolge häufig in ihre Bestandteile - Wörter oder Tokens. Dies erreicht man mittels einer Schablone, die sich vollständig aus Variablen (Zielen) zusammensetzt.

/*Angenommen es wurde "Hammer 1 Stück DM600.00" eingegeben*/
PULL teil anz einh preis .

In diesem Beispiel wird die Eingabezeile aus dem Befehl PULL in Wörter zerlegt und den Variablen in der Schablone zugewiesen. Die Variable "teil" erhält den Wert "Hammer", anz wird auf "1" gesetzt, einh auf "Stück", und preis erhält den Wert "DM600.00". Der abschließende Platzhalter (.) erhält einen Nullwert, da die Eingabe nur aus vier Wörtern besteht. Allerdings führt er dazu, daß die vorherige Variable (preis) einen tokenisierten Wert erhält. Würde der Platzhalter weggelassen, so würde der gesamte Rest der Analysezeichenfolge der Variable "preis" zugewiesen, so daß dieser ein Leerzeichen vorangestellt würde.

Antwort = "Nur Amiga macht es möglich."
DO forever
PARSE VAR antwort erst antwort
/*Erstes Wort in `erst' und den Rest in `antwort' stellen.*/
IF erst =='' THEN LEAVE
/*Beenden, wenn keine weiteren Wörter mehr vorhanden sind*/
SAY antwort
END

Das erste Wort einer Zeichenfolge wird entfernt und der Rest wieder in die Zeichenfolge gestellt. Der Prozeß wird so oft wiederholt, bis keine Wörter mehr extrahiert werden können. Daraus ergibt sich folgende Ausgabe:

Amiga macht es möglich.
macht es möglich.
es möglich.
möglich.

Sytanxanalyse nach Mustern

Mustermarken extrahieren die gewünschten Felder. Das "Muster" ist in diesem Fall sehr einfach - es besteht nur aus einem einzigen Zeichen. Es könnte aber auch eine beliebig lange Zeichenfolge gewählt werden. Diese Form der Syntaxanalyse empfiehlt sich besonders, wenn in der Analysezeichenfolge Begrenzungszeichen vorkommen.

/*Angenommen, die Argumentzeichenfolge lautet "12,35.5,1" */
ARG hours `, ' rate `, ` Withhold

Das Muster wird aus der Analysezeichenfolge entfernt, wenn eine Übereinstimmung festgestellt wird. Wird die Analysezeichenfolge erneut von Anfang an abgesucht, kann die Zeichenfolge eine andere Länge und Struktur aufweisen als zu Beginn des Syntaxanalyseprozesse. Die ursprüngliche Quelle der Zeichenfolge wird jedoch niemals verändert.

Syntaxanalyse nach Positionsmarken

Die Syntaxanalyse mit Positionsmarken wird immer dann eingesetzt, wenn bekannt ist, daß sich die Felder von Interesse an bestimmten Positionen innerhalb einer Zeichenfolge befinden.

/* Sätze sehen wie folgt aus: */
/* Start: 1-5 */
/* Länge: 6-10 */
/* Name: fängt an bei (Start), hat (Lang) */
PARSE value satz with 1 start +5 lang +5 =start name +lang

Der zu verarbeitende Satz enthält ein variables Längenfeld. Startposition und Länge des Felds werden im ersten Teil des Satzes mit einer variablen Positionsmarke angegeben, aufgrund der das gewünschte Feld extrahiert wird.

Die Sequenz "=start" ist eine absolute Marke, deren Wert aus der Position hervorgeht, die weiter vorne im Suchvorgang in die Startvariable gestellt wurde. Die Sequenz "+lang" liefert die tatsächliche Länge des Felds.

Mehrere Schablonen

Zu einem Befehl können Sie auch mehrere Schablonen angeben. Dazu sind die einzelnen Schablonen jeweils durch ein Komma voneinander zu trennen. Der Befehl ARG (oder PARSE UPPER ARG) greift auf die Argumentzeichenfolge zu, die beim Aufruf des Programms zur Verfügung gestellt wurden. Die Schablonen greifen nacheinander auf je eine Argumentzeichenfolge zu. Zum Beispiel:

/*Angenommen, die Argumente lauten (`eins zwei,12,sort)*/
ARG erstes zweites,menge,aktion,option

Die erste Schablone besteht aus den Variablen erstes und zweites, die auf die Werte "eins" und "zwei" gesetzt werden. Die nächste Schablone weist den Wert "12" an "menge" zu, und "aktion" wird auf "SORT" gesetzt. Die letzte Schablone besteht aus der Variablen "option", die hier auf die leere Zeichenfolge gesetzt wird, da nur vier Argumente vorhanden waren.

Wenn mehrere Schablonen mit den Quelloptionen EXTERNAL oder PULL verwendet werden, fordert jede weitere Schablone vom Benutzer eine weitere Eingabezeile an:

/*Lesen von nachname, vorname und weitere sowie von datum*/
PULL nachname `, ` vorname weitere,datum

Es werden zwei Eingabezeilen gelesen. Die erste Eingabezeile sollte drei Wörter enthalten, die den Variablen "nachname", "vorname" und "weitere" zugewiesen werden. Auf die erste Variable folgt ein Komma. Die gesamte zweite Eingabezeile wird der Variablen "datum" zugewiesen.

Hoch Zurück Weiter Kapitel