next up previous contents
Next: 6.2.7 Spezielle Eingabeschlüsselworte Up: 6.2 Eingabeanalyse Previous: 6.2.5 Konfiguration der Bedienelemente

6.2.6 Schleifen

Über die bisher vorgestellten grundlegenden Konstrukte hinaus kennt der Parser noch einige Sonderfälle, die für viele Eingabesituationen wichtig sind.

Innerhalb von Regeln können Schleifen realisiert werden. Diese werden durch eine LISP-Liste definiert, deren erstes Element :REPEAT heißt. Die weiteren Listenelemente können die üblichen Regelteile Terminal, Nonterminal und Aktion sein; das auf :REPEAT folgenden Listenelement sollte aber keine Aktion sein, damit der Parser vor jeder einzelnen Abarbeitung der Schleife prüfen kann, ob das aktuelle Eingabewort von der Schleife akzeptiert wird und, wenn nicht, die Schleife beenden kann. Damit eine Schleife am Ende einer Regel kontrolliert beendet wird, ist die Verwendung des Schlüsselwortes :END im Eingabefluß zweckmäßig, das nach der Schleife akzeptiert werden kann (s. Abb. 6.4). So verhindert man Mehrdeutigkeiten zwischen dem Ende dieser und dem Start einer anderen Regel.

Besondere Beachtung muß den semantischen Besonderheiten einer Schleife geschenkt werden. Nach Beendigung der Schleife steht ein Gesamtresultat aller Schleifendurchläufe an der Position vor der Schleife; die Stelle der Schleife selbst wird nicht für die Datenindizierung gezählt. Während einer Abarbeitung des Schleifeninhaltes stehen die Resultate der vorhergehenden Regelteile unter ihren gewöhnlichen Nummern zur Verfügung, und daran anschließend die Teile der Schleife (das :REPEAT-Schlüsselwort wird nicht gezählt). Das Resultat jedes Schleifendurchlaufes steht danach in der Position vor der Schleife. Diese Position hat daher die Bedeutung eines ,,Datensammlers``; typisch dabei ist die Verknüpfung dieses Datums innerhalb der Schleife mit den neuen Daten der Schleife im letzten Ausdruck, dessen Resultat automatisch wieder an jene Position gestellt wird.

Da der Parser die Elemente der Schleife für jeden Durchlauf erneut auf den Stapel legen muß, sind sie in einem speziellen Konstrukt zusammengefaßt, das mit einem :REPEAT-Schlüsselwort beginnt. Seine folgenden Listenelemente sind die Terminale, Nonterminale und Aktionen. Ist dieses repeat-Konstrukt zuoberst, dann wartet der Parser auf das nächste Eingabewort, um die Entscheidung über einen neuerlichen Schleifendurchlauf anhand des ersten Syntaxteiles des Schleifenkörpers treffen zu können. Wenn dadurch die Eingabe akzeptiert werden kann, dann legt der Parser die Elemente des Schleifenkörpers auf den Stapel, darunter ein zusätzliches Konstrukt :CLEAN, das zur Bereinigung des Datenstapels dient, und arbeitet dann normal weiter. Wenn die Schleife die Eingabe nicht akzeptiert, wird das :REPEAT-Konstrukt vom Stapel entfernt und normal weitergearbeitet.

   figure2241
Abbildung 6.4: Zustände der beiden Stapel während der Abarbeitung des Nonterminals polyline mit einer Schleife


next up previous contents
Next: 6.2.7 Spezielle Eingabeschlüsselworte Up: 6.2 Eingabeanalyse Previous: 6.2.5 Konfiguration der Bedienelemente

Martin Knaipp
Wed Jun 12 15:41:33 MET DST 1996