260 likes | 425 Views
Semantische Analyse und attributierte Grammatiken. Sarah Al-Itaibi. Gliederung . Einordnung der semantischen Analyse in die Phasen des Übersetzers Einführung in die semantische Analyse des Quellprogramms Zentrale Aufgaben der semantischen Analyse Einführung in attributierte Grammatiken
E N D
Semantische Analyse und attributierte Grammatiken Sarah Al-Itaibi
Gliederung • Einordnung der semantischen Analyse in die Phasen des Übersetzers • Einführung in die semantische Analyse des Quellprogramms • Zentrale Aufgaben der semantischen Analyse • Einführung in attributierte Grammatiken • Auswertung semantischer Regeln • Zusammenfassung
Einordnung der semantischen Analyse in die Phasen des Übersetzers • Phasen des Übersetzers:
Einführung in die semantische Analyse des Quellprogramms • Aufbau einer künstlichen Sprache erfolgt nach festen Regeln (Syntax, Grammatik). • Wörter und Sätze besitzen wohldefinierte Bedeutungen (Semantik). • Wichtige Aufgabe bei der Übersetzung: • Beibehaltung des Bedeutungsgehaltes. • Beispiele aus der deutschen Sprache: • Der Hecht frisst die Forelle. • Das Plankton frisst den Hecht. • Die Wirkung eines Satzes ergibt sich aus seiner Bedeutung.
Einführung in die semantische Analyse des Quellprogramms • Semantische Analyse überprüft, ob die Teile eines Programms von der Bedeutung her zusammenpassen. • Beispiel: • Überprüfung der Anzahl der Parameter bei Prozeduraufrufen. • Typüberprüfung bei Zuweisungen: • Volumen := Fläche * Höhe • Quellprogramm wird auf semantische Fehler untersucht: • Beispiel: Zuweisen eines Buchstabens an eine Integer-Variable (Typkonflikt).
Einführung in die semantische Analyse des Quellprogramms • Eingabe: Syntaxbaum. • Ergänzung des Syntaxbaums um semantische Informationen (Attribute) Bewerteter Syntaxbaum. • Verschmelzung von Syntaxanalyse und semantischer Analyse Übergabe eines Syntaxbaumes ist hinfällig.
Einführung in die semantische Analyse des Quellprogramms • Unterscheidung zwischen statischer und dynamischer semantischer Analyse. • Statische semantische Analyse: • Zur Übersetzungszeit • Semantische Eigenschaften werden mit Hilfe des Programmtextes bestimmt • Semantische Eigenschaften: • Deklaration jedes verwendeten Bezeichners • Abwesenheit von Doppeldeklarationen • Korrekte Verwendung jeder Variable entsprechend ihres Datentyps
Einführung in die semantische Analyse des Quellprogramms • Dynamische semantische Analyse: • Zur Laufzeit. • Semantische Eigenschaften werden durch Ausführung des Programms mit Eingabedaten herausgefunden Der Typ eines Ausdrucks wird erst bei der Auswertung, zur Laufzeit, bekannt.
Zentrale Aufgaben der semantischen Analyse • Bezeichneridentifikation: • Zur Identifikation dienen Definitionen und Gültigkeitsregeln der Programmiersprache. • Definition: Einführung des Bezeichners als Benennung eines Objektes. • Aufgabe: • Zu jedem angewandten Auftreten des Bezeichners die gültige Definition bestimmen. • Jede Definition eines Bezeichners hat einen Gültigkeitsbereich.
Zentrale Aufgaben der semantischen Analyse • Gültigkeitsbereich einer Definition ist der Abschnitt des Quellprogramms, in dem Anwendungen des Bezeichners dieser Definition zugeordnet werden. • Gültigkeitsregeln bestimmen Gültigkeitsbereich. • Beispiele für Gültigkeitsregeln: • Verdeckungsregel. • Keine Anwendung eines Bezeichners vor seiner Definition. • Als Hilfsmittel dient die Symboltabelle. • Charakteristische Fehlersituationen: • Unzulässige Mehrfachdefinitionen im gleichen Block. • Angewandte Bezeichner ohne gültige Definition.
Zentrale Aufgaben der semantischen Analyse • Typüberprüfung: • Typinformationen können bei der Codegenerierung benötigt werden. • Sicherstellung der Typkonsistenz eines Programms. • Überprüfung der Typkonsistenz erfolgt durch einen bottom-up Durchlauf des Baumes. • Typanpassung von Ausdrücken.
Einführung in attributierte Grammatiken • Eine attributierte Grammatik ist die am häufigsten verwendete Technik zur formalen Beschreibung von Übersetzungsprozessen. • Sie wurden von Knuth im Jahre 1968 eingeführt. • Definition: Sie ist ein Quadrupel AG = (G, A, R, K) bestehend aus: 1. Einer kontextfreien Grammatik G = (VN, VT, P, S). 2. Einer endlichen Attributmenge A. 3. einer endlichen Menge semantischer Regeln R. 4. einer endlichen Menge von Kontextbedingungen K. • Jedem Symbol X aus VN VT werden null oder mehr Attribute zugeordnet • Jeder Produktionsregel p aus P werden ebenfalls null oder mehr semantische Regeln und Kontextbedingungen zugeordnet.
Einführung in attributierte Grammatiken • Folgendes Beispiel dient dem intuitiven Verständnis der attributierten Grammatiken: • Produktionsregel: pOpr: Ausdruck lOpd Opr rOpd • Semantische Regel: Ausdruck.Typ:= opr_identif(Opr.Symbol, lOpd.Type, rOpd.Type) • Ausschnitt eines bewerteten Syntaxbaumes:
Einführung in attributierte Grammatiken • Jedes Attribut hat einen Namen und einen Wert. • Attribute können repräsentieren: String, Zahl, Typ oder einen Speicherplatz. • Attributarten: • Synthetisierte Attribute: • Werden bei der Erkennung eines Symbols erzeugt. • Wert errechnet sich aus den Werten der Attribute der Nachfolgerknoten. • Lexikalischer Analysator bestimmt die synthetisierten Attribute der Terminalsymbole. • Mittels dieser Attribute können semantischen Informationen von den Blättern bis zur Wurzel weitergereicht werden.
Einführung in attributierte Grammatiken • Ererbte Attribute: • Werden einem Nichtterminalsymbol vor seiner Erkennung mitgegeben. • Wert errechnet sich aus den Werten der Attribute des Vorgängerknotens und/oder Geschwisterknoten. • Startsymbol hat keine ererbten Attribute. • Mittels dieser Attribute können semantische Informationen von den Nachfolgern der Wurzel bis zu den Blättern vererbt werden. • Auswertung der Attribute: • Code generieren. • Informationen in einer Symboltabelle abspeichern. • Fehlermeldungen ausgeben.
Einführung in attributierte Grammatiken • Kontextbedingungen: • Sind Bedingungen der statischen Semantik für die Attribute. • Beschreiben Beziehungen zwischen Attributen bzw. Elementen der Sprache. • Zeitpunkt der Prüfung wird durch ihre Stellung in der Grammatikregel festgelegt. • Ein Syntaxbaum repräsentiert ein übersetzbares Programm, wenn alle Kontextbedingungen erfüllt sind. • Bedingung wird durch eine Relation zwischen Attributen ausgedrückt. • Zum Beispiel: • „In einer Wertzuweisung müssen linke und rechte Seite vom selben Typ sein“ • Beispiel: • Bedingung einer Sprache: „alle Variablen müssen explizit deklariert sein“. • PROCEDURE P VAR a, b : INTEGER x := y END P
Auswertung semantischer Regeln • Bei der Auswertung muss der Syntaxbaum auf bestimmten Wege durchlaufen werden und dabei müssen die semantischen Regeln ausgewertet werden. • Sämtliche Attributwerte, von denen eine semantische Regel oder Kontextbedingung abhängt, müssen berechnet sein, vor Anwendung der Regel. • Bei zyklischen Abhängigkeiten zwischen Attributen können deren Werte effektiv nicht berechnet werden. • Zu jedem Syntaxbaum, der Attribute enthält, gibt es einen Abhängigkeitsgraphen. • Abhängigkeitsgraph zeigt die Abhängigkeit zwischen den Attributen des Baumes, die sich aus den semantischen Regelnergeben.
Auswertung semantischer Regeln • Attribute bilden Knoten des Graphen. • Gerichtete Kanten geben die in den semantischen Regeln ausgedrückten Abhängigkeiten an. • Attributierte Grammatik heißt wohldefiniert, wenn die Abhängigkeitsgraphen zu allen Syntaxbäumen zyklenfrei sind. • Ein Abhängigkeitsgraph setzt sich immer aus den produktionslokalen Abhängigkeitsgraphen der angewandten Produktionen zusammen. • Beispiel einer attributierten Grammatik zur Umrechnung von Binärzahlen in Dezimalzahlen: • Attribut v: berechneter Wert. • Attribut r: Rang bzw. relative Position des BIT zum binären Punkt. • Attribut l: Länge des Bit-String.
Auswertung semantischer Regeln Attribute Grammar Bin_to_Dec: Nonterminals: {N, BIN, BIT} Attributes: syn l with BIN domain int; Syn v with N, BIN, BIT domain real; Inh r with BIN, BIT domain int; Production: Semantik Functions: 1: N BIN.BIN N.v = BIN1.v + BIN2.v BIN1.r = 0 BIN2.r = -BIN2.l 2: BIN BIN BIT BIN0.v = BIN1.v + BIT.v BIN0.l = BIN1.l + 1 BIN1.r = BIN0.r + 1 BIT.r = BIN0.r 3: BIN ε BIN.v = 0 BIN.l = 0 4: BIT 1 BIT.v = 2BIT.r 5: BIT 0 BIT.v = 0
Auswertung semantischer Regeln • Produktionslokale Abhängigkeitsgraphen:
Auswertung semantischer Regeln • Syntaxbaum mit Abhängigkeitsgraph zum Wort „10.01“:
Auswertung semantischer Regeln • Auswertung erfolgt: • Nach erhalten des um die Attribute erweiterten Syntaxbaumes. • Parallel zur Syntaxanalyse, gesteuert durch den Parser. • Auswertungsschritte bei gegebenem Syntaxbaum: • Bildung des Abhängigkeitsgraphen und test auf Zyklenfreiheit. • Bestimmung der Auswertungsordnung (Besuchsfolge, topologische Sortierung). • Auswertung der Attribute gemäß der Auswertungsordnung. • Findet die Auswertung währen der Syntaxanalyse statt, dann ist die Auswertungsreihenfolge abhängig von der Reihenfolge, in der die Knoten erzeugt werden. • Ordnung der Attribute im vorherigen Beispiel: • Für BIN: l r v • Für BIT: r v
Auswertung semantischer Regeln • Auswertung des Beispiels: • Top-down Durchlauf, gefolgt von einem bottom-up Durchlauf zur Auswertung von l. • Top-down Durchlauf zur Auswertung von r. • Bottom-up Durch lauf zur Berechnung von v.
Auswertung semantischer Regeln • Syntaxgesteuerte Definition: Notation um semantische Regeln mit Produktionsregeln zu verbinden. • Seiteneffekte in semantischen Regeln erlaubt, wie das Drucken eines Wortes. • Beispiel: • S-attributierte Definition • L-attributierte Definition • Restriktion bei L-attributierten Definitionen: • Jedes ererbte Attribut eines Knotens hängt nur von ererbten Attributen des Vaterknotens und der linken Geschwisterknoten ab.
Zusammenfassung • Semantische Analyse notwendig um den Bedeutungsgehalt beizubehalten. • Wichtigste Aufgaben der semantischen Analyse sind die Typüberprüfung und die Bezeichneridentifikation. • Attributierte Grammatiken dienen der Verbreitung semantischer Informationen in Syntaxbäumen. • Attributierte Grammatiken definieren, wie in einem beliebigen Syntaxbaum alle Attribute berechnet werden können. • Auswertung der Attribute kann parallel zur Syntaxanalyse erfolgen oder nach erhalt des attributierten Syntaxbaumes.
Vielen Dank für Ihre Aufmerksamkeit! Haben Sie noch Fragen?