11.1.1 Lexikalische Analyse (Scanner)
Next: 11.1.2 Syntaktische Analyse (Parser)
Up: 11.1 Syntaxanalyse
Previous: 11.1 Syntaxanalyse
Die lexikalische Analyse faßt die einzelnen Zeichen der Eingabe zu
sogenannten Terminalsymbolen (``Token'') zusammen. Gleichzeitig wird
ein Protokoll der Eingabe erzeugt. In diesem Protokoll werden die
Eingabezeilen durchnumeriert und an passenden Stellen Seitenvorschübe
mit einer entsprechenden Kopfzeile eingefügt.
Die lexikalische Analyse ist als ein endlicher deterministischer Automat
implementiert.
Die dafür notwendigen Tabellen werden mit dem Programm SCANGEN
[76] erstellt.
Die Eingabe für dieses Programm ist dem Anhang B.1 zu
entnehmen.
Die einzelnen Terminalsymbole werden dabei durch reguläre Ausdrücke
definiert. Schlüsselworte werden durch Ausnahmen der jeweiligen
regulären Ausdrücke festgelegt.
In der lexikalischen Analyse mußten folgende Spezialitäten behandelt
werden:
- Buchstaben, die außerhalb von Text-Konstanten vorkommen
(z.B. in Schlüsselworten) werden intern immer in Großbuchstaben
umgewandelt, um die Verarbeitung zu vereinfachen.
- In JANAP können Knotennamen auch nur aus Ziffern bestehen.
Dadurch ist erst durch den syntaktischen Kontext erkennbar, ob eine
Ziffernkette nun eine Zahl ist oder ein Knotenname.
Insbesondere ist auch die Zugehörigkeit des Minus-Zeichens zur nachfolgenden
Ziffernkette erst bei der Syntaxanalyse entscheidbar, da bei der Definition
der Bauelemente der Plus- und der Minusknoten auch durch ein Minus-Zeichen
getrennt werden.
Durch diese Nebenbedingungen kann der Scanner noch nicht endgültig
entscheiden, ob es sich um eine Zahl oder um einen Knotennamen handelt.
Der Scanner liefert daher verschiedene Terminalsymbole, die alle eine
Zahl sein können, oder auch nur ein Knotenname sind.
- Obwohl die Schlüsselworte, die für die einzelnen Parameter innerhalb
einer Anweisung verwendet werden, eigentlich nur innerhalb dieser
Anweisung reservierte Namen sein müßten, sind sie als global reservierte
Namen implementiert, da sonst der Scanner zu kompliziert würde.
Dies bedeutet keine gravierende Einschränkung für den Anwender von JANAP.
- Im Zusammenhang mit Funktionen in Ausdrücken gibt es Probleme bei
der Analyse der Syntax (wird genauer im nächsten Abschnitt diskutiert).
Um diese Probleme zu lösen, hat der Scanner die Möglichkeit, in der
Eingabe nicht existierende Terminalsymbole einzufügen.
Dies sind die letzten vier Terminalsymbole in Anhang B.1.
- Für die Anweisungen zur Definition eines Bauelements gibt es in
JANAP kein eigenes Anweisungsschlüsselwort (wie z.B. für PRINT).
Topologie-Anweisungen werden nur anhand des ersten Zeichens im ersten
Terminalsymbol der Anweisung erkannt.
Dies verkompliziert die Erkennung von Namen.
Next: 11.1.2 Syntaktische Analyse (Parser)
Up: 11.1 Syntaxanalyse
Previous: 11.1 Syntaxanalyse
Martin Stiftinger
Fri Jun 9 19:49:39 MET DST 1995