Syntaxdiagramme: Formularmaschine
Um aus einer Kollektion von Syntaxdiagrammen
Wörter der durch sie definierten Sprache zu erzeugen ,
können wir eine Formularmaschine verwenden:
-
Für jedes Diagramm gibt es einen Satz Formulare
(Kopien nach Bedarf).
-
Es gibt ein aktuelles Blatt, mit dem wir arbeiten,
und einen Stapel von teilweise bearbeiteten Blättern;
anfangs ist er leer, und das aktuelle Blatt gehört zum Startsymbol.
-
wir suchen auf dem aktuellen Blatt einen zulässigen Weg vom
Eingang zum Ausgang und notieren die Folge der dabei akzeptierten Symbole
als Ergebnis des Blattes:
-
wenn wir auf einen (runden) Terminalknoten stoßen,
so akzeptieren wir das zugehörige Symbol und gehen weiter;
-
stoßen wir auf einen (eckigen) Nichtterminalknoten,
so notieren wir die aktuelle Stelle und das bisherige Ergebnis auf
dem Blatt und legen es oben auf den Stapel; wir beginnen ein neues
Formular der Sorte, die zu dem Nichtterminal gehört.
-
Haben wir den Ausgang des aktuellen Formulars erreicht,
so notieren wir das Resultat und legen das Blatt beiseite.
Nun gibt es zwei Fälle:
-
ist der Stapel nicht leer, so holen wir das oberste Blatt
als aktuelles Formular, übertragen das aktuelle Resultat
als Ergebnis des bearbeiteten Nichtterminalknotens, und fahren fort;
-
war der Stapel leer, so ist unser Resultat das Endergebnis.
-
Das beschriebene Verfahren funktioniert so nicht, wenn die Diagramme
linksrekursiv sind, wenn man also beim Aufruf weiterer Diagramme,
ohne ein Zeichen gelesen oder produziert zu haben, zum Ausgangsdiagramm
zurückkommt. Hier hilft eine Umformung der Diagramme weiter.
Jedem Exemplar eines Diagramms können wir
einen endlichen Automaten zuordnen;
wir haben also einen Stapel oder Keller
von endlichen Automaten: einen Kellerautomaten.
Da wir jede Grammatik der Klasse 2
in Syntaxdiagramme umformen können,
sind Kellerautomaten also ebenso mächtig.
Man kann versuchen, die Formularmaschine auch zum Erkennen
von Wörtern der beschriebenen Sprache zu verwenden;
dann muß aber an jeder Verzweigung jedes Diagramms
an Hand der Eingabe erkennbar sein, wie es weiter geht.
Dies ist oft, aber leider nicht für alle Grammatiken so
(die LL(1)-Bedingungen müssen erfüllt sein);
dann braucht man andere Methoden, die in der Theoretischen Informatik
und im Compilerbau besprochen werden.
zurück |
Inhalt | Index |
vor |
Vorlesung
Klaus Lagally, 22. Februar 2000, 19:36