11.1 Syntaxanalyse
Next: 11.1.1 Lexikalische Analyse (Scanner)
Up: 11 Die einzelnen Komponenten
Previous: 11 Die einzelnen Komponenten
Bei einem Programmsystem wie JANAP, das zur Definition des zu lösenden
Problems eine Eingabesprache erfordert, steht an der ersten Stelle
der Verarbeitung die Analyse der Eingabe.
Diese Analyse teilt sich in drei, prinzipiell verschiedene, Teile [3]:
- Lineare Analyse:
- Während der linearen Analyse werden die einzelnen
Zeichen der Eingabe von links nach rechts gelesen und zu Terminalsymbolen
(``Token''), das sind Zeichenketten mit einer generellen Bedeutung (z.B.
Namen, Zahlen, Trenner), zusammengefaßt .
Diese Phase wird Lexikalische Analyse oder Scanning genannt.
- Hierarchische Analyse:
- Während der hierarchischen Analyse werden
die Terminalsymbole hierarchisch zu grammatikalischen Gruppen mit einer
Bedeutung (z.B. Anweisung) zusammengefaßt.
Diese Phase wird Syntax Analyse oder Parsen genannt.
In dieser Phase hat alleine die syntaktische Form eine Bedeutung.
- Semantische Analyse:
- In dieser Phase werden eine Reihe von Kontrollen
durchgeführt, um zu verifizieren, daß die einzelnen Syntax-Elemente
wirklich sinnvoll zusammenpassen (z.B. die in einer Ausgabeanweisung
referenzierten Bauelemente müssen im topologischen Teil auch wirklich
definiert worden sein).
In dieser Phase werden auch die Informationen gesammelt, die notwendig sind,
um dann die Netzwerkgleichungen aufzubauen, die Simulation durchzuführen
und die gewünschten Werte auszugeben.
Die lexikalische und syntaktische Analyse werden in diesem Abschnitt
behandelt, die Semantikanalyse wird in Abschnitt 11.2 besprochen.
Grundsätzlich gibt es bei der lexikalischen und der syntaktischen Analyse
zwei Methoden der Durchführung:
- Tabellengesteuert:
- Die lexikalische und syntaktische Analyse wird
jeweils mit Hilfe eines (deterministischen) Automaten durchgeführt.
Mit Hilfe geeigneter Generatoren werden die Tabellen für diese
Automaten erstellt.
Die Semantikanalyse wird in diesem Fall meistens durch eigene
sogenannte Semantik-Routinen durchgeführt.
- Ausprogrammiert:
- Die zur Analyse notwendigen (deterministischen)
Automaten werden voll ausprogrammiert. Es sind daher keine Tabellen mehr
erforderlich. Der Automat wird durch bedingte Anweisungen (IF)
realisiert. Dadurch ist der Automat an sich nicht mehr erkennbar.
Bei dieser Implementierungstechnik ist die Semantikanalyse eng mit
der Syntaxanalyse verquickt.
Natürlich gibt es nicht nur diese zwei Methoden in Reinkultur sondern
auch je nach Problemstellung verschiedene Mischformen.
Jede dieser Techniken hat ihre Vor- und Nachteile.
Die wichtigsten von ihnen in zwangloser Reihenfolge sind:
- Die ausprogrammierte Implementierung ist besonders bei einer sehr
einfachen Syntax effizienter. Bei einer komplizierten Syntax wird die
tabellengesteuerte Implementierung geringeren Speicherbedarf haben.
- Insbesondere eine mit der Hand ausprogrammierte Implementierung
ist sehr schwer an eine neue Syntax adaptierbar. In diesem
Fall ist die Fehleranfälligkeit auch sehr hoch, da die erstellten
Programme sehr groß werden.
Es ist daher der Einsatz eines Programmgenerators sehr zu empfehlen.
- Bei der (mit der Hand) ausprogrammierten Variante ist eine
wesentlich bessere Behandlung von Fehlersituationen möglich.
Eine automatische Fehlerbehandlung liefert in der Regel nur geringe
Hinweise zur Fehlerbehebung für den Benutzer.
In der ausprogrammierten Variante können Fehlermeldungen konstruktiver
gestaltet werden.
- Bei der ausprogrammierten Variante kann die Syntax- und die
Semantik-Analyse zusammengefaßt werden, wodurch die Semantik-Analyse
in der Regel etwas effizienter gestaltet werden kann.
- Bei der tabellenorientierten Variante wird normalerweise
ein Programm zur Erstellung der Tabellen verwendet.
Dieses Programm erlaubt in der Regel nur eine eingeschränkte Grammatik.
(z.B. LL(1) [9], LR(1) [2], LALR(1)).
Diese Einschränkungen verbieten meistens
gewisse Arten von Rekursionen der Produktionen der Grammatik
(z.B. Links-Rekursion) und erfordern, daß die zu verwendende Regel
der Grammatik nur durch Vorausschauen auf eine beschränkte Anzahl (z.B. 1)
von Terminalsymbolen ausgewählt werden kann.
In der ausprogrammierten Variante - sofern man nicht einen Programmgenerator
verwendet oder die erzeugten Programme nachträglich modifiziert -
bieten sich hier wesentlich mehr Möglichkeiten.
Die Entscheidung, welche Variante konkret gewählt wird, wird meistens nicht
nur von den oben angeführten Unterschieden geprägt sondern hängt von
der Verfügbarkeit geeigneter Programm- bzw. Tabellengeneratoren ab.
Für JANAP wurde eine voll tabellengesteuerte Variante ausgewählt.
Auch die Behandlung von Syntaxfehlern wird tabellengesteuert durchgeführt.
Für die Erstellung der Tabellen werden Tabellengeneratoren, die an
der Universität von Wisconsin entwickelt wurden, eingesetzt.
Next: 11.1.1 Lexikalische Analyse (Scanner)
Up: 11 Die einzelnen Komponenten
Previous: 11 Die einzelnen Komponenten
Martin Stiftinger
Fri Jun 9 19:49:39 MET DST 1995