Compilerbauhome Compilerbau: Semantische Analyse Prof. Dr. Uwe Schmidt FH Wedel

Semantische Analyse

weiter

weiter

Statische Semantik

Aufgaben
Überprüfung
1.
Sind alle benutzten Namen deklariert?
2.
Sind alle benutzten Namen sinnvoll verwendet?
3.
Haben alle Operationen sinvolle Argumente?
Typcheck
Attributierung
mit Typinformation für die Codeerzeugung oder Interpretation
weiter
Beispiel
// an example source
 
class X {
  int isEven(int x) {
    return
      X % 2 == O;
  }
}
?
Dieses Java-Programm enthält mindestens 3 Fehler. Welche?
weiter
Beispiel Syntaxbaum
Abstrakte Syntax
 
data ProgramTree = ProgT [ ClassDef ]
 
data ClassDef    = CDef { className   :: String
                        , superClass  :: Maybe String
                        , interfaces  :: [ String ]
                        , classBody   :: ClassBody
                        }
 
data ClassBody   = CBody { methods    :: [ Method ]
                         , fields     :: [ Field ]
                         }
 
data Method      = ...
 
data Field       = ...
weiter
Arbeitsweise
typische Struktur
1.
rekursiver Durchlauf durch den Programmbaum
möglicherweise mehrfach
2.
Aufbau eines Environments, einer Umgebung, eines Verzeichnisses für die Beschreibung der vorkommenden Namen
3.
rekursiver Durchlauf für den Typcheck und die Attributierung
weiter
Entwurfsmuster
Interpretierer, Besucher
weiter
Generatoren
für die semantische Analyse
Beschreibung
attributierte Grammatik
jedem Grammatik-Symbol werden Attribute zugeordnet
weiter
abgeleitete Attribute
Information wird von einem Knoten zu den Nachfahren transportiert
weiter
synthetisierte Attribute
Information wird von den Kindern zu den Eltern-Knoten transportiert
weiter
Traversierung
des Programmbaumes wird erzeugt
weiter
merke
Generatoren sind nicht so verbreitet, wie für Scanner und Parser
merke
für kleine Sprachen manchmal ein zu komplexes Werkzeug
gut
aber im industriellen Einsatz

Letzte Änderung: 30.10.2019
© Prof. Dr. Uwe Schmidt
Prof. Dr. Uwe Schmidt FH Wedel