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
  | 
  |  |