Klassifizierung |
klassenbasiertes Verhaltensmuster
|
| |
Alias |
interpreter
|
| |
Motivation |
Verarbeitung von hierarchisch aufgebauten Objektstrukturen
--> Kompositum
|
| |
Beispiel |
Verarbeitung eines abstrakten Syntaxbaums (Programmbaum)
|
|
Typcheck
|
|
Compilieren
|
|
Interpretieren
|
|
Transformieren (Optimierung)
|
| |
Motivation |
|
|
jede etwas komplexere textuelle Notation
wird mit Hilfe einer (kontextfreien) Grammatik definiert
|
|
aus der kontextfreien Grammatik wird ein
Datenmodell abgeleitet
eine abstrakte Syntax
|
|
alternative Regeln in einer Grammatik
werden zu Klassenhierarchien im Datenmodell
|
|
die rekursiven Syntaxregeln führen
zu dem Kompositum-Muster
|
|
die Programmbäume werden durch Traversieren und
knotenabhängige Methodenaufrufe verarbeitet
|
| |
Beispiele |
|
|
|
|
Anfrage-Interpretation von SQL-Anfragen
|
|
|
|
Interpretation des XML/HTML-Strukturbaums aus der
Fallstudie über die Verarbeitung von XML/HTML
|
| |
Anwendbarkeit |
|
|
immer, wenn Baumstrukturen (Hierarchien)
verarbeitet werden
|
|
insbesondere, wenn die zu verarbeitende Sprache nicht
sequentiell gelesen und gleichzeitig verarbeitet werden
kann (Vorwärtsreferenzen)
|
|
abstrakter Syntaxbaum macht die Verarbeitung frei
von textueller Anordnung
|
|
Transformationen sind einfacher auszuführen
|
| |
Struktur |
Strukturdiagramm
|
| |
Teilnehmer |
|
Ausdruck |
Schnittstelle für die Interpretierer-Operation(-en)
|
EinfacherAusdruck |
konkrete Klasse für ein Blatt
|
KomplexerAusdruck |
konkrete Klasse für einen inneren Knoten
|
Kontext |
Klasse für Zusatzinformation, die über Parameter
in die Interpretationsroutinen kommt
|
Resultat |
Klasse für das Ergebnis der Interpretation
|
| |
Konsequenzen |
|
|
einfache Erweiterbarkeit der Grammatik
Klassenhierarchie um eine konkrete Klasse und
Interpretationsroutinen erweitern
|
|
Verarbeitung wird unabhängig von der konkreten
Syntax
Java auf Plattdeusch kein Problem
|
|
Verarbeitung durch rekursiven Abstieg
|
|
wenn viele ähnlich strukturierte Interpretationen
vorkommen besteht die Gefahr der Codeverdopplung
Besucher-Muster als Ausweg
|
|
werden die Knoten eines Baumes nicht verändert,
Fliegengewichte einsetzen zum gemeinsamen Nutzen
von Teilbäumen
|
| |
Beispiel |
|
Beispiel |
|
| |
Beispiel |
|
| |
Bekannte Verwendungen |
überall
|
| |
verwandte Muster |
|
|
ist bei Baumstrukturen immer das Strukturmuster
|
| |
|
kann zum Konstruieren eines Baumes verwendet werden
|
| |
|
kann das Traversieren von der eigentlichen Verarbeitung
der Knoten trennen
gut für die Implementierung mehrerer ähnlicher Interpretierer
|
| |