Vorausschau |
Top Previous Next |
Einführung > Vorausschau
Die Entscheidung darüber mit welcher Produktion oder Verzweigung innerhalb einer Produktion die Analyse eines Textes fortgesetzt wird, häng stets davon ab, welche Token im Text folgen. Am effizientesten arbeitet ein Parser, wenn bereits das nächstfolgende Token diese Entscheidung ermöglicht. Wenn stets die Vorausschau um nur ein Token zum Analysieren des Textes ausreicht, so nennt man den Parser LL(1)-konform. Es ist eine Kunst des Entwicklers die Grammatik - die Menge der Produktionen - eines Textes so zu formulieren, dass der Parser LL(1)-konform wird. Der TextTransformer bietet eine große Unterstützung bei dieser Aufgabe, da er automatisch Hinweise und Fehlermeldungen generiert, wenn die Grammatik nicht LL(1)-konform ist. TETRA erlaubt jedoch auch die Vorausschau um beliebig viele Token, wenn dies erforderlich sein sollte. Zur Formulierung einer solchen Vorausschau dienen erneut die bereits bekannten Produktionen. Eine Produktion kann versuchsweise auf einen Text angewendet werden, um zu testen, ob sie ihn parsen kann oder nicht. Abhängig vom Ergebnis dieses Tests kann die Analyse des Textes dann auf verschiedene Weise fortgesetzt werden. (Bei der versuchsweisen Anwendung von Produktionen werden keine semantischen Aktionen ausgeführt.)
Die Vorausschau sei nochmals an den konkreten Beispiel einer förmlichen Anrede am Anfang eines Briefes erläutert. Sie lautet entweder
Sehr geehrter Herr NAME
oder
Sehr geehrte Frau NAME
Um diese kurzen Texte zu parsen, könnte man zunächst auf die Idee kommen, folgende Produktionen zu formulieren (Das Zeichen "|" trennt Alternativen voneinander, bedeutet also "oder"):
Anrede ::= AnredeBeginn NAME
AnredeBeginn ::= "Sehr" "geehrter" "Herr" | "Sehr" "geehrte" "Frau"
Bei dieser Formulierung ist eine Vorausschau um zwei Token erforderlich. Erst nachdem das Wort "Sehr" erkannt ist kann durch das folgende Wort entschieden werden, welche Alternative von AnredeBeginn zu wählen ist und es muss wieder vor das Wort "Sehr" zurückgegangen werden, um mit der Verarbeitung des Textes zu beginnen
Besser sind folgende Produktionen:
Anrede ::= "Sehr" Ehrung NAME Ehrung :: "geehrter" "Herr" | "geehrte" "Frau"
Bei dieser Formulierung entscheidet stets das nächst Wort eindeutig, wie in den Produktionen fortzufahren ist. Erstaunlich viele Texte lassen sich nach diesem LL(1)-Prinzip parsen, wenn man die Regeln entsprechend entwirft.
Dennoch gibt es Fälle bei denen eine Vorausschau um nur ein Token prinzipiell nicht ausreicht. Im TextTransformer ist es möglich in solchen Fällen beliebig weit im Text voraus-zuschauen. Z.B. könnte es nötig sein schon vor dem Parsen eines Satzes zu wissen, ob es sich um einen Fragesatz handelt oder nicht. Der Fragesatz ist aber erst am Ende des Satzes durch das Fragezeichen zu identifizieren. Das ließe sich folgendermaßen bewerkstelligen:
IF( Fragesatz() ) Fragesatz ELSE Normalsatz END
Fragesatz :: FragesatzWortfolge "?" Normalsatz ::= NormalsatzWortfolge ( "." | "!" )
|
Diese Seite gehört zur TextTransformer Dokumentation |
Home Inhalt English |