Transcript Vortrag

Syntaxgerichtete Übersetzung und
Typüberprüfung
Sommersemester 2009
Seminar Übersetzung künstlicher Sprachen im SS 2009
Marco A. Castillo
Agenda
Motivation und Einordnung
Syntaxgerichtete Übersetzung
Syntaxgerichtete Definition
Auswertungsreihenfolge für syntaxgerichtete Definition
Verfahren zur syntaxgerichteten Übersetzung
Implementierung von L-attributierter syntaxgerichteten Definition
Typüberprüfung
Dynamische und statische Überprüfung
Typsysteme
Regeln für die Typüberprüfung
Fazit
1
Seminar Übersetzung künstlicher Sprachen im SS 2009
Motivation und Einordnung
Von der Quellsprache zur Zielmaschine
2
Seminar Übersetzung künstlicher Sprachen im SS 2009
Syntaxgerichtete Übersetzung
Syntaxdefinition
Kontextfreie Grammatik
Beschreibung der
hierarchischen Struktur
einer
Programmiersprache
if (Ausdruck) Anweisung else Anweisung
stmt → if (expr) stmt else stmt
3
Syntaxgerichtete Definition
Kontextfreie Grammatik
Grammatiksymbole +
Attributen
Produktionen +
Semantikregeln
Produktion
E → E1 + T
Semantikregel
E.code = E1.code|| T.code||‘+‘
Seminar Übersetzung künstlicher Sprachen im SS 2009
Syntaxgerichtete Übersetzung
Attribute in Grammatiken
4
Seminar Übersetzung künstlicher Sprachen im SS 2009
Syntaxgerichtete Übersetzung
Syntaxgerichtete Definition eines einfachen Taschenrechners
5
Seminar Übersetzung künstlicher Sprachen im SS 2009
Syntaxgerichtete Übersetzung
Kommentierter Parse-Baum für 3*5+4
6
Seminar Übersetzung künstlicher Sprachen im SS 2009
Abhängigkeitsgraph
Informationsfluss zwischen den Attributinstanzen
Kanten drücken die durch Semantikregeln auferlegten
Einschränkungen aus
Auswertungsreihenfolge für
syntaxgerichtete Definitionen
Abhängigkeitsgraph
Informationsfluss zwischen
den Attributinstanzen
Kanten drücken die durch
Semantikregeln auferlegten
Einschränkungen aus
7
Seminar Übersetzung künstlicher Sprachen im SS 2009
Auswertungsreihenfolge für
syntaxgerichtete Definitionen
S-attributierte Definition
• Alle Attribute sind synthetisiert
• Abhängigkeitsgraph mit zirkulären Bezügen wird nicht
zugelassen
• Auswertungsreihenfolge garantiert
• Auswertung durch Botton Up Reihenfolge
postorder (N) {
for (jedes Kind C von N von links aus) postorder (C);
fasse Attribute von/mit N zusammen;
}
8
Seminar Übersetzung künstlicher Sprachen im SS 2009
Auswertungsreihenfolge für
syntaxgerichtete Definitionen
L-attributierte Definition
• Zwischen den mit der Produktion verbundenen Attritbuten
verlaufen die Kanten im Abhängigkeitsgraphen nur von links
nach rechts
• Attribute sind synthetisiert oder vererbt (eingeschränkt)
• Vererbte Attribute sind mit dem Regelkopf verbunden
• Auswertung durch eine Top Down Reihenfolge
dfvisit (N) {
for (jeden Nachfolger M von N von links nach rechts)
werte ererbte Attribute aus;
dfvisit (M);
werte die synthetisierten Attribute von N aus;
}
9
Seminar Übersetzung künstlicher Sprachen im SS 2009
Anwendung der syntaxgerichtete Übersetzung
Syntaxbaum
Verdichteter Parse-Baum
Jeder Knoten eines Syntaxbaums stellt ein Konstrukt dar
Die Kinder des Knotens repräsentieren die sinnvollen Komponente
des Konstrukts
Zwischendarstellung
10
Seminar Übersetzung künstlicher Sprachen im SS 2009
Syntaxgerichtete Übersetzungsschemata
Ergänzende Notation zur syntaxgerichteten Definition
Kontextfreie Grammatik mit Programmfragmenten die in die Produktionsrümpfe eingebettet sind
Programmfragmente (semantische Aktionen) können an jeder Stelle eines Produktionsrumpfes erscheinen.
Auswertungsreihenfolge der semantischen Regeln durch Position gegeben
Aktionen werden mit {..} eingeschlossen
Ergänzende Notation zur syntaxgerichteten Definition
Kontextfreie Grammatik mit Programmfragmenten, die in die
Produktionsrümpfe
eingebettet
sind (‚+‘}; rest 1
rest
→ + term {printf
Programmfragmente (semantische Aktionen) können an jeder
Stelle eines Produktionsrumpfes erscheinen
Auswertungsreihenfolge der semantischen Regeln durch Position
gegeben
Aktionen werden mit {..} eingeschlossen
Verfahren zur syntaxgerichteten Übersetzung
11
Seminar Übersetzung künstlicher Sprachen im SS 2009
Syntaxgerichtete Übersetzungsschemata
Ausdrücke in Infix-Notation (9-5)+2 oder 9-(5+2)
Ausdrücke in Postfix-Notation 9 5 – 5 + oder 9 5 2 + -
12
Seminar Übersetzung künstlicher Sprachen im SS 2009
Syntaxgerichtete Übersetzungsschemata
S
( 9 – 5) + 2
13
Seminar Übersetzung künstlicher Sprachen im SS 2009
Syntaxgerichtete Übersetzungsschemata
(9 – 5) + 2
14
Seminar Übersetzung künstlicher Sprachen im SS 2009
Syntaxgerichtete Übersetzungsschemata
(9 – 5) + 2
9
95
95–
95–2
95–2+
15
Seminar Übersetzung künstlicher Sprachen im SS 2009
Implementierung von L-attributierten
syntaxgerichteten Definitionen
Übersetzung beim Durchlaufen eines Parse-Baumes
Aufbauen und Kommentieren des Parse-Baumes
Aufbauen des Parse-Baumes, Hinzufügen von Aktionen und
Ausführen der Aktionen in Postorder
Übersetzung während des Parserns
Verwenden eines rekursiven absteigenden Parsers
Generieren von Code im laufenden Betrieb
Implementieren einer syntaxgerichteten Übersetzung zusammen mit
Implementieren einer syntaxgerichteten
einem LL-Parser
Übersetzung
zusammen
mit Übersetzung
einem LL-Parser
Implementieren
einer
syntaxgerichteten
zusammen mit
Implementieren
einem
LR-Parsereiner syntaxgerichteten Übersetzung zusammen mit
einem LR-Parser
16
Seminar Übersetzung künstlicher Sprachen im SS 2009
L-attributierte syntaxgerichtete (LL-Grammatik)
Aktionen in den Produktionen eingebettet
Implementierung von L-attributierten
syntaxgerichteten Definitionen
Übersetzung während der LL-Syntaxanalyse
L-attributierte syntaxgerichtete (LL-Grammatik)
Aktionen in den Produktionen eingebettet
Übersetzung während der LL-Syntaxanalyse
•Aktionsdatensatz:
•Enthält einen Zeiger auf ausführbaren Code (meist
Auswertung von ererbten Attributen)
•Synthetisierungsdatensatz:
•Enthält Anweisungen zur Synthese von Attributen und
Aktionen (kopieren der synthetisierten Attribute in andere
Datensätze weiter unten im Stack)
L-attributierte syntaxgerichtete Definitionen und LL-Syntaxanalyse
17
Seminar Übersetzung künstlicher Sprachen im SS 2009
Dynamische und statische Überprüfung
Wir unterscheiden zwischen
Statischen Überprüfung (während der Kompilierung)
Dynamischen Überprüfung (zur Laufzeit)
Statische Überprüfung
Typüberprüfung
Überprüfung der Kontrollflusses
Überprüfung auf Eindeutigkeit
Auf Namen bezogene Überprüfung
Dynamische Überprüfung
Dynamische Typüberprüfung ist erforderlich, wenn der Typ von
Variablen und Objekten nur zur Laufzeit bestimmt werden kann
18
Seminar Übersetzung künstlicher Sprachen im SS 2009
Typüberprüfung
Was wird überprüft?
Ob Operatoren und Operanden kompatibel sind
Welche Programmelemente haben einen Typ?
Konstanten
Variablen
Ausdrücke
Parameter
Welche Attribute werden durch Typen festgelegt?
Werte von Konstanten
Wertebereiche / Operationen für Variable, Ausdrücke, Parameter
Übergabemechanismus für Parameter
Verwendung von Informationen über Typen
Ermittlung des Speicherbedarf
Erzeugung von Code für die Umwandlung von einem Typ in einen
anderen
Ermittlung des Resultatttyps
19
Seminar Übersetzung künstlicher Sprachen im SS 2009
Typüberprüfung - Beispiele
x div y
→
x, y müssen vom Typ integer sein.
array [INDEX] of …. → INDEX muss Ordnungstyp
sein.
procedure p(formal_1: Typ_1, var formal 2: Typ 2);
……
p (aktuell_1, aktuell_2);
- aktuell_1 mit formal_1 verträglich?
- aktuell_2 mit formal_2 verträglich?
- aktuell_2 muss eine Variable sein.
20
Seminar Übersetzung künstlicher Sprachen im SS 2009
Typsysteme
Was ist ein Typsystem?
Ein Typsystem für eine Programmiersprache ist eine Menge von
Regeln, die die korrekte Verwendung von Typen im Kontext bestimmen.
Für bestimmte Konstrukte muss der Typ gegeben sein (Definition) und
für andere kann der Typ aus der Struktur bestimmt werden.
Ein Typsystem heißt stark, wenn alle möglichen statischen Typkonflikte
zur Übersetzungszeit erkannt werden können.
Ein Typsystem besteht aus gewissen Basistypen (Typnamen) und
Konstruktoren, mit denen neue Typen aus vorhandenen konstruiert
werden können.
Mit den Konstruktoren werden Typausdrücke gebildet
21
Seminar Übersetzung künstlicher Sprachen im SS 2009
Typüberprüfung von Ausdrücke
22
Seminar Übersetzung künstlicher Sprachen im SS 2009
Typüberprüfung von Anweisung
23
Seminar Übersetzung künstlicher Sprachen im SS 2009
Fazit
Der allgemeine Ansatz für die syntaxgerichtete Übersetzung besteht
darin, einen Parser- oder Syntaxbaum zu konstruieren und dann die
Werte der Attribute an dem Knoten des Baumes zu berechnen, indem
diese Knoten aufgesucht werden.
Zwei Notationen möglich
Syntaxgerichtete Definition. Sie verbergen viele
Implementierungsdetails und befreien den Benutzer von der
expliziten Spezifikation der Reihenfolge, in der die Übersetzung
stattfindet
Übersetzungsschemata legen die Reihenfolge fest, in der die
semantischen Regeln auszuwerten sind, daher erlauben sie es,
einige Implementierungsdetails zu zeigen.
24
Seminar Übersetzung künstlicher Sprachen im SS 2009
Fazit
25
Seminar Übersetzung künstlicher Sprachen im SS 2009
Fazit
Typüberprüfung
Wichtig, um mögliche Programmfehler fest zu stellen
Statische und dynamische Überprüfung
if <complex test> the 5 else <type error>
26
Seminar Übersetzung künstlicher Sprachen im SS 2009
Backup-Folien
27
Seminar Übersetzung künstlicher Sprachen im SS 2009
Syntaxgerichtete Übersetzung für whileAnweisungen
Implementierung von L-attributierten
syntaxgerichteten Definitionen
Syntaxgerichtete Übersetzung für while-Anweisungen
L-attributierte syntaxgerichtete Definitionen und LL-Syntaxanalyse
28
Seminar Übersetzung künstlicher Sprachen im SS 2009
Backup-Folien
Attribut Auswertung
29
Seminar Übersetzung künstlicher Sprachen im SS 2009
Backup-Folien
Attributierte LR – Grammatik für Ausdrücke (Infix → Postfix)
30
Seminar Übersetzung künstlicher Sprachen im SS 2009
Backup-Folien
Attributierte LL – Grammatik für Ausdrücke (Infix → Postfix)
31
Seminar Übersetzung künstlicher Sprachen im SS 2009
Backup-Folien
32
Seminar Übersetzung künstlicher Sprachen im SS 2009
Backup-Folien
Typ-Ausdrücke
33
Seminar Übersetzung künstlicher Sprachen im SS 2009
Backup-Folien
Grafische Darstellung von Typausdrücke
34
Seminar Übersetzung künstlicher Sprachen im SS 2009
Backup-Folien
Syntaxgesteuerte Überprüfung von Typen
35
Seminar Übersetzung künstlicher Sprachen im SS 2009
Backup-Folien
Übersetzungsschema für Deklarationen
36
Seminar Übersetzung künstlicher Sprachen im SS 2009
Backup-Folien
Übersetzungsschema für Anweisungen
37
Seminar Übersetzung künstlicher Sprachen im SS 2009
Backup-Folien
Äquivalenz von Typen
38
Seminar Übersetzung künstlicher Sprachen im SS 2009
Backup – Folien
Überprüfung der strukturellen Äquivalenz
39
Seminar Übersetzung künstlicher Sprachen im SS 2009
Backup – Folien
Namensäquivalenz
40
Seminar Übersetzung künstlicher Sprachen im SS 2009
Backup – Folien
Strukturäquivalenz
41
Seminar Übersetzung künstlicher Sprachen im SS 2009
Backup-Folien
Ererbte Attribute - Typdeklarationen
42
Seminar Übersetzung künstlicher Sprachen im SS 2009
Backup-Folien
43
Seminar Übersetzung künstlicher Sprachen im SS 2009
Backup-Folien
Wie kommt man zu einen Übersetzungsschema
44
Seminar Übersetzung künstlicher Sprachen im SS 2009