SYNTAXGESTEUERTE ÜBERSETZUNG

Ähnliche Dokumente
1 Attributierte Grammatiken. 2 Zyklische AG. 3 Codeerzeugung mit AGs. Zusatzfolien Semantische Analyse Wintersemester 2008/09 1 / 28

Inhalte der Vorlesung. 6. Syntaxgesteuerte Übersetzung. 6. Syntaxgesteuerte Übersetzung. Attributierter Syntaxbaum

Inhalte der Vorlesung. 6. Syntaxgesteuerte Übersetzung. Attributierter Syntaxbaum. 6. Syntaxgesteuerte Übersetzung

Attributierte Grammatiken

Äquivalente Grammatiken / attributierte Grammatik

Definition von LR(k)-Grammatiken

LL(k)-Analyse. (y) folgt α = β. (x) = start k. (=l> ist ein Linksableitungsschritt)

Kapitel 5: Syntax-Analyse

Fachseminar Compilerbau

Compilerbau Syntaxanalyse 68. LR(1)-Syntaxanalyse

Theoretische Grundlagen der Informatik

Lexikalische Programmanalyse der Scanner

Einführung - Parser. Was ist ein Parser?

Von der Grammatik zum AST

9.4 Grundlagen des Compilerbaus

Syntax von Programmiersprachen

Was bisher geschah Chomsky-Hierarchie für Sprachen: L 0 Menge aller durch (beliebige) Grammatiken beschriebenen Sprachen L 1 Menge aller monotonen

Kapitel 4. Attributierte Grammatiken. Attributierte Grammatiken Wintersemester 2009/10 1 / 64

Deterministischer Kellerautomat (DPDA)

Kellerautomat (1/4) Kellerautomat (2/4) Kellerautomat (3/4) Kellerautomat (4/4)

Compilerbau. Bachelor-Programm. im SoSe Prof. Dr. Joachim Fischer Dr. Klaus Ahrens Dipl.-Inf. Ingmar Eveslage.

6 Kontextfreie Grammatiken

Grundlagen der Programmierung 2 (Comp-D)

2.6 Deterministisches Top-Down-Parsen

Operationen auf Grammatiken

Übungs- und Praktikumsaufgaben zur Systemprogrammierung Dipl.-Ing. H. Büchter (Lehrbeauftragter) FH-Dortmund WS 2001/2002 / SS 2002

Shift Reduce Parser (Bottom up Parser) Historie Grundbegriffe Tabellengesteuerter LR(1) Parser Konstruktion der Elementmengen Tabellenkonstruktion

Lemma Für jede monotone Grammatik G gibt es eine kontextsensitive

5 BINÄRE ENTSCHEIDUNGS- DIAGRAMME (BDDS)

Attributierte Grammatiken

Praktische Informatik 3: Funktionale Programmierung Vorlesung 11 vom : Monaden als Berechnungsmuster

VU Software Paradigmen / SS 2014

I.5. Kontextfreie Sprachen

Konstruieren der SLR Parsing Tabelle

Algorithmen auf Sequenzen

Prof. Dr. Wolfgang Schramm. Vorname:... Matrikel-Nr.:... Unterschrift:...

Vorlesung Programmieren

Kapitel: Die Chomsky Hierarchie. Die Chomsky Hierarchie 1 / 14

DieÜbersetzung funktionaler Programmiersprachen

6. Funktionen, Parameterübergabe

Grundlagen der Programmiersprachen und Compiler

Definition Compiler. Bekannte Compiler

Implementierung eines LR-Parser-Generators mit syntaktischen Prädikaten

...imbeispiel: Die Konkatenation der Blätter des Ableitungsbaums t bezeichnen wir auch mit yield(t). liefert die Konkatenation: name int + int.

Vorname:... Matrikel-Nr.:... Unterschrift:...

Gedächtnisprotokoll, mündliche Prüfung Übersetzerbau (01810) am Allgemeine Fragen

Übersetzergenerierung mit lex und yacc

Semantik von Programmiersprachen SS 2017

Grundlagen der Theoretischen Informatik

LR-Parser, Shift-Reduce-Verfahren

2.1 Grundlagen: Kontextfreie Grammatiken

Fachseminar. Semantische Analyse

Theoretische Grundlagen der Informatik

Grundlagen der Theoretischen Informatik / Einführung in die Theoretische Informatik I

kontextfreie Grammatiken Theoretische Informatik kontextfreie Grammatiken kontextfreie Grammatiken Rainer Schrader 14. Juli 2009 Gliederung

Compiler; Übersetzungsprogramme. Grundlagen der Programmierung 3 A. Compiler für Programmiersprachen. Phasen eines Compilers

Grundlagen der Theoretischen Informatik

Grundlagen der Informatik III Wintersemester 2010/ Vorlesung Dr.-Ing. Wolfgang Heenes

Informatik-Seminar Thema: Monaden (Kapitel 10)

Compilerbau II Skript

Syntaxanalyse Ausgangspunkt und Ziel

Automaten und formale Sprachen Klausurvorbereitung

2.4 Kontextsensitive und Typ 0-Sprachen

Grammatiken. Grammatiken sind regelbasierte Kalküle zur Konstruktion von Systemen und Sprachen Überprüfung von Systemen und Sprachen

Teil 111. Chart-Parsing

Programmiersprachen und Übersetzer

Definition 4 (Operationen auf Sprachen) Beispiel 5. Seien A, B Σ zwei (formale) Sprachen. Konkatenation: AB = {uv ; u A, v B} A + = n 1 An

Theoretische Informatik SS 03 Übung 3

Formale Sprachen. Script, Kapitel 4. Grammatiken

Compiler: Parser. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München. Letzte Änderung:

Funktionale Programmierung. Funktionale Programmierung: Vorlesungsüberblick. Eigenschaften rein funktionaler Programmierung

2.1 Allgemeines. Was ist eine Sprache? Beispiele:

Das Postsche Korrespondenzproblem

Konzepte von Programmiersprachen

Masterarbeit von Filipp Andjelo

Grundlagen der Theoretischen Informatik

Übersetzerbau Cluj-Napoca, Rumänien 2007

Hallo Welt für Fortgeschrittene

Automaten und Formale Sprachen alias Theoretische Informatik. Sommersemester 2011

Übungsblatt 7. Vorlesung Theoretische Grundlagen der Informatik im WS 16/17

Lex und Yacc Lt. Worf, scannen Sie das Schiff! 300dpi, Sir?

Theoretische Grundlagen der Informatik

1 Grammar Engineering. 2 Abstrakte Syntax als abstrakte Algebra. 3 LL(1)-Parser. 4 LR Parser. 5 Fehlerbehandlung. 6 Earley Parser

LL(1)-Parsing. Ullrich Buschmann, Linda Schaffarczyk, Maurice Schleussinger. Automatische Syntaxanalyse (Parsing)

Theorie der Informatik. Theorie der Informatik. 6.1 Einführung. 6.2 Alphabete und formale Sprachen. 6.3 Grammatiken. 6.4 Chomsky-Hierarchie

Umformung NTM DTM. Charakterisierung rek. aufz. Spr. Chomsky-3-Grammatiken (T5.3) Chomsky-0-Grammatik Rek. Aufz.

Kontextfreie Grammatiken. Kontextfreie Grammatiken 1 / 45

Nachklausur zur Vorlesung Informatik 3 mit einigen Anmerkungen zu Lösungen

Kurs 1613 Einführung in die imperative Programmierung Musterlösung zur Nachklausur am

1 Potenzen und Polynome

Fragenkatalog 1810 Übersetzerbau (2008 by Jörg Jacob) Version 1 studium (at) snuablo (dot) com

SYNTAXANALYSE TOP- DOWN- ANALYSE

Lexikalische Analyse, Tokenizer, Scanner

3.4 Struktur von Programmen

Anwenundg regulärer Sprachen und endlicher Automaten

Einführung in die Informatik. Programming Languages

Alphabet, formale Sprache

Kapitel IV Formale Sprachen und Grammatiken

Grammatik Prüfung möglich, ob eine Zeichenfolge zur Sprache gehört oder nicht

Transkript:

4. Kapitel SYNTAXGESTEUERTE ÜBERSETZUNG Compilerbau Prof. Dr. Wolfgang Schramm

Weitere Arbeitsschri8e 1 Erledigt: Quellprogramm kann lexikalisch und syntakgsch analysiert werden, ein Ableitungsbaum kann erstellt werden. Zu tun: SemanGsche Analyse und Erzeugen des Zielprogramms aus dem Ableitungsbaum. Idee: Syntaxanalyse steuert semangsche und andere AkGonen wie Codeerzeugung.

Beispiel Codeerzeugung 2 E E + T E T T T * F T F F (E) F id Syntaxanalyse erfolge Bottom-up Reduktion/Produktion Aktion/semantische Regel F id erzeuge Befehl LOAD id T T * F erzeuge Befehl MULT E E + T erzeuge Befehl ADD Für Eingabe (id + id) * id entsteht: LOAD id LOAD id ADD LOAD id MULT Code für Stackmaschine

Beispiel SemanGküberprüfung 3 Reduktion/Produktion Aktion/semantische Regel F id bestimme id.typ aus der Symboltabelle F. typ := id. typ F (E) F. typ := E. typ T F T. typ := F. typ T T 1 * F if (T 1. typ = INTEGER) and (F. typ = INTEGER) then T. typ := INTEGER else T. typ = REAL E T E. typ := T. typ E E 1 + T if (E 1. typ = INTEGER) and (T. typ = INTEGER) then E. typ := INTEGER else E. typ = REAL

4 ImplemenGerung der Verzahnung von Syntaxanalyse und AkGonen A8ribute Wertemengen z.b. Typ numerische Werte Einträge in die Symboltabelle Code OperaGonen (FunkGonen) für die Auswertung von A8ributen. Es gibt 2 Arten von A8ributen zusammengesetzte (synthegsierte A8ribute) ererbte A8ribute

DefiniGon: A8ribuGerte GrammaGk 5 Definition: Attributierte Grammatik Gegeben sei eine kontextfreie Grammatik G = (N, T, P, S). Eine attributierte Grammatik enthält für jedes Symbol X (N T) eine Menge von Attributen A(X) und für jede Produktion p: X 0 X 1... X m (X i N T) eine Menge von semantischen Regeln R(p) der Form: X i.a := f(x j.b,..., X k.c), wobei die X i etc. i.d.r. vorkommende Symbole darstellen und X i.a deren Attribute. Für jedes Auftreten von X im Ableitungsbaum ist höchstens eine Regel anwendbar, um X i.a zu berechnen, " a A(X). Syntaxgesteuerte Definition: Die semantischen Regeln dürfen auch Seiteneffekte haben.

Zusammengesetze / SyntheGsierte A8ribute 6... hängen von den A8ributen der Kinder ab, d.h. die A8ributwerte des Elternknotens können erst dann berechnet werden, wenn die A8ributwerte der Kinder bekannt sind. Sei p: X 0 X 1... X m die ProdukGon p, zu deren Regelmenge die Regel b := f(c 1... c k ) gehört. Das A8ribut b heißt synthegsiert, falls es A8ribut von X 0 ist und die c i (1 i k) A8ribute der X i (1 i m) sind. X 0 X 1 X 2 X 3 X 4 Synthetisiertes Attribut, kann von eigenen oder von Attributen bei X 1, X 2, X 3 und X 4 abhängen.

SyntheGsierte A8ribute Beispiel 1/2 7 Taschenrechner für einfache arithmetische Ausdrücke: RedukGon/ProdukGon AkGon/semanGsche Regel L E= output(e.val) E E 1 + T E.val := E 1.val + T.val E T E.val := T.val T T 1 * F T.val := T 1.val * F.val T F T.val := F.val F (E) F.val := E.val F digit F.val := digit.lexval S-attributierte Definition, wenn nur synthetisierte Attribute vorkommen

SyntheGsierte A8ribute Beispiel 2/2 8 L E 48 = 6 * ( 3 + 5) T 48 T 6 * F 8 Datenflussgraph F 6 ( E 8 ) digit 6 E 3 + T 5 T 3 F 5 Datenfluss Ableitungen F 3 digit 5 digit 3

Ererbte A8ribute 9... hängen von den A8ributen des Elternknotens oder der Geschwisterknoten ab, d.h. die A8ributwerte eines Knotens werden nach denen des Elternknotens oder der Geschwisterknoten berechnet. Sei p: X 0 X 1... X m die ProdukGon p, zu deren Regelmenge die Regel b := f(c 1... c k ) gehört. Das A8ribut b heißt ererbt, falls es A8ribut eines der X i (1 i m) auf der rechten Seite von p ist und die c i (1 i k) A8ribute der X j (0 j m, j i) sind. X 0 X 1 X 2 X 3 X 4 Attributen bei X 0, X 1, X 2 und X 4 abhängen. Ererbtes Attribut, kann von Ererbte Attribute erlauben die Erfassung von kontextsensitiven Konstruktionen in Programmiersprachen

Ererbte A8ribute Beispiel 1/2 10 Beispiel: Typdeklarationen integer a, b, c; real e, f; ProdukGon semangsche Regel Decl Type VarList ; VarList.type := Type.type Type integer Type.type := integer Type real Type.type := real VarList VarList 1, Var VarList 1.type := VarList.type addtype(var.entry, VarList.type) trage in Symboltabelle bei Var als Typ den Wert von VarList.type ein VarList Var addtype(var.entry, VarList.type)

Ererbte A8ribute Beispiel 2/2 11 Decl integer a, b, c; Type type integer VarList ; type integer d integer VarList, Var type integer d entry integer VarList, Var type integer d entry integer Var entry integer

Abhängigkeitsgraph 12 for jeden Knoten n im Ableitungsbaum do for jedes Attribut a des Grammatiksymbols in n do erzeuge einen Knoten im Abhängigkeitsgraph für a; for jeden Knoten n im Ableitungsbaum do for jede semantische Regel b := f(c 1... c k ), die mit der Produktion in n verknüpft ist do for i := 1 to k do erzeuge eine Kante vom Knoten für c i zum Knoten für b;

Abhängigkeitsgraph - Beispiele 13 o o Beispiel: ProdukGon A XY SemanGsche Regel: A.a := f(x.x, Y.y) synthegsches A8ribut A.a, hängt ab von den A8ributen X.x und Y.y es gibt 3 Knoten mit Kanten von X.x A.a und Y.y A.a o SemanGsche Regel: X.x := g(a.a, Y.y) ererbtes A8ribut X.x, hängt ab von den A8ributen A.a und Y.y es gibt 3 Knoten mit Kanten von A.a X.x und Y.y X.x

Auswertung der A8ribute 14 Wann werden die A8ribute ausgewertet? KonstrukGon des Syntaxbaums und anschließende Ausrechnung. Parallel zur Erstellung des Syntaxbaums. Offen: In welcher Reihenfolge werden die A8ribute ausgewertet? Abhängigkeitsgraph muss so sorgert werden, dass man eine geeignete Reihenfolge für die Auswertung der semangschen Regeln erhält. è Topologisches SorGeren der Knoten des azyklischen Abhängigkeitsgraphen: Knoten werden in eine Reihenfolge n 1,..., n k gebracht, so dass für jede Kanten (n i, n j ) im Graphen gilt: i j. Damit ist garangert, dass Knoten mit kleinerer Ordnungszahl vor einem mit einer größeren ausgewertet wird.

15 Auswertungsreihenfolge der A8ribute (Abhängigkeitsgraph) - Beispiel Decl Ableitungsbaum Type VarList ; type integer 4 type integer 5 d 6 integer VarList, Var type integer 7 d 8 entry integer 3 VarList, Var type integer 9 d 10 entry integer 2 Var Abhängigkeitsgraph Die Zahlen 1 10 entsprechen den Knoten des Abhängigkeitsgraphen. 1-3: A8ribut entry, das mit jedem mit id bezeichneten Bla8 verbunden ist. 6, 8, 10: dummy- A8ribute à stellen Anwendung der Fkt. addtype auf einen Typ einen einen der entry- Werte dar. 4: A8ribut Type.type hier beginnt die A8ributauswertung tatsächlich. Type.type wird an 5, 7, 9 übergeben und stellen VarList.type dar. entry integer 1 Topologische SorGerungen (Auswahl): 1, 2, 3, 4, 5, 6. 7, 8. 9, 10 4, 5, 3, 6, 7, 2, 8, 9, 1, 10 4, 5, 7, 9, 1, 2, 3, 10, 8, 6 4, 5, 3, 6, 7, 8, 2, 9, 1, 10 A8ributberechnung: type4 := integer; type5 := type4; addtype (entry3, type5); type7 := type5; addtype (entry2, type7); type9 := type7; addtype (entry1, type5);

Auswertungsreihenfolge festlegen 16 Bisher: Syntaxgesteuerte DefiniGon legt keine Reihenfolge bei der A8ributauswertung fest. Jetzt: Reihenfolge festlegen durch L- a8ribugerte DefiniGon (eingeschränkte Klasse syntaxgesteuerter DefiniGonen). Übersetzungsschema sta8 syntaxgesteuerter DefiniGon. Idee: Attribute von oben-nach-unten und von links-nach-rechts auswerten. Synthetisierte Attribute (rechts vom Knoten) Ererbte Attribute (links vom Knoten)

L- A8ribuGerung 17 DefiniGon: L- aeribuferte syntaxgesteuerte DefiniFon Eine syntaxgesteuerte DefiniGon heißt L- a8ribugert, wenn jedes ererbte A8ribut eines X j auf der rechten Seite einer ProdukGon X 0 X 1... X m nur abhängt von (i) A8ributen der Symbole X 1... X j- 1 und (ii) ererbten A8ributen von X 0. L steht für von links nach rechts. Die L-Attributierung reicht für die Beschreibung der meisten Konstruktionen in Programmiersprachen aus.

Reihenfolge der L- A8ribut- Berechnung 18 procedure a8r_eval (n: node) { Seien m 1,..., m k (von links nach rechts) die Söhne von n. for i := 1 to k do berechne die ererbten A8ribute von m i ; a8r_eval (m i ); od; Berechne die synthegsierten A8ribute von n; }

Übersetzungsschemata 19... bestehen aus Kontex{reier GrammaGk ( Basis ). A8ributen für GrammaGksymbole. ProdukGonen mit in die rechte Seite eingebe8eten semangschen AkGonen. A........ {... }........ {... }.... Semantische Aktionen In......... X {... } Y.... wird die semantische Aktion - nach der Behandlung von X - vor der Behandlung von Y durchgeführt.

Übersetzungsschema - Beispiel 20 E TR R +T {write ( + )} R -T {write ( - )} R ε T num {write (num.value)} Wie sieht der Ableitungsbaum für das Übersetzungsschema für 17 + 6-9 aus?

Wie kommt man zu einem Übersetzungsschema? 21 Ausgangspunkt: L-attributierte Definition Der Wert eines ererbten Attributs eines Symbols auf der rechten Seite einer Produktion muss in einer semantischen Regel vor diesem Symbol zugewiesen werden. Der Wert eines synthetisierten Attributs wird in einer semantischen Regel zugewiesen, die am Ende der rechten Seite steht. Beispiel: Decl Type {VarList.type := Type.type} VarList ; Type integer {Type.type := integer} Type real {Type.type := real} VarList {VarList 1.type := VarList.type} VarList 1, Var {addtype(var.entry,varlist.type)} VarList Var {addtype(var.entry, VarList.type)}

Top- Down- Übersetzungsschema 22 Ausgangspunkt (Grammatik mit Linksrekursion): A Aα β A βa und A αa ε Übersetzungsschema: A A 1 Y {A.a := g(a 1.a, Y.y)} X {A.a := f(x.x)} A A g Y y 2 A X f x g Y y 1 Problem: Linksrekursion

Ableitungsbaum ohne Linksrekursion 23 A XR R YR ε X A R Y R Y R Frage: Wie sieht jetzt das neue Übersetzungsschema aus? Idee: Das neue Symbol R erhält 2 Attribute ein ererbtes und (R.e) ein synthetisiertes (R.s). ε

Datenfluss nach BeseiGgung der Linksrekursion 24 A Synthetisiertes Attribut R.s Ererbtes Attribut R.e X x f Y R g R y 1 Y g R Übersetzungsschema: A X {R.e := f(x.x)} R {A.a := R.s} R Y {R 1.e := g(r.e, Y.y)} R 1 {R.s := R 1.s} R ε {R.s := R.e)} y 2 ε

Top- Down- Übersetzungsschema - Beispiel 1/2 25 Ausgangspunkt (Grammatik mit Linksrekursion): E E 1 + T {E.val := E 1.val + T.val} T {E.val := T.val} T T 1 * F {T.val := T 1.val * F.val} F {T.val := F.val} F (E) {F.val := E.val} digit {F.val := digit.val} E TR R +TR ε T FS S * FS ε F (E) digit Weiter mit Grammatik ohne Linksrekursion

Top- Down- Übersetzungsschema - Beispiel 2/2 26 E T {R.e := T.val} R {E.val := R.s} R + T {R 1.e := R.e + T.val} R 1 {R.s := R 1.s} R ε {R.s := R.e} T F {S.e := F.val} S * S {T.val := S.s} F {S 1.e := S.e * F.val} S 1 {S.s := S 1.s} S ε {S.s := S.e} F ( E ) {F.val := E.val} digit {F.val := digit.val}

Erzeugung von LL(1) Übersetzungsschemata 1/5 27 Erzeugung eines syntaxgesteuerten Übersetzungsschemas auf der Basis einer LL(1)-Grammatik. Erweitere die Methode des rekursiven AbsGegs um semangsche AkGonen für die Auswertung von A8ributen. Die LL(1)- Steuertabelle gibt in jeder SituaGon A: NTS a: nächstes Token an, welche ProdukGon A α anzuwenden ist. Reihenfolge der A8ribut- auswertung: A α α

Erzeugung von LL(1) Übersetzungsschemata 2/5 28 Aussehen von A α mit α = α 1 α 2... α n A α 1 α 2... α n Dabei sind die α i die Elemente der rechten Seiten der Übersetzungs- schemata. o Erzeuge für jedes NTS A eine FunkGon des Musters: funcfon A (Parameter für die ererbten A8ribute von A): synthegsierte A8ribute von A Lokale Variable für jedes A8ribut, das einem Symbol der rechten Seite α einer ProdukGon A α zugeordnet ist.

Erzeugung von LL(1) Übersetzungsschemata 3/5 29 o FunkGonsrumpf: BesGmme die anzuwendende ProdukGon A α, wobei für jedes der α i, 1 i n, drei Fälle möglich sind: (i) α i, ist TS (ii) α i, ist NTS (iii) α i, ist T semangsche AkGon {... } Setze Rumpf nach dem Muster Behandlung von α 1 ; Behandlung von α 2 ;.... Behandlung von α n ; zusammen.

Erzeugung von LL(1) Übersetzungsschemata 4/5 30 α i ist TS X TS besitzen nur synthetisierte Attribute, die vom Scanner geliefert werden. Aktionen: if TS X mit dem momentan betrachteten Token (look-ahead) übereinstimmt then speichere die Attribute von X in den dafür vorgesehenen lokalen Variablen der Funktion für A (X.x := symbol.x); Beschaffe nächstes Token (match (x)); else beende die Funktion mit einer Fehlermeldung;

Erzeugung von LL(1) Übersetzungsschemata 5/5 31 α i ist NTS X Aktionen: Berechne die synthetisierten Attribute Xs von X durch die Zuweisung: Xs := X(Xe 1,..., Xe n ) α i ist semantische Aktion b := f (c 1,..., c k ) Aktionen: Kopiere die Aktionen in den Programmtext ein, wobei jedes Auftreten eines Attributs durch den Namen der entsprechenden lokalen Variablen ersetzt wird.

32 Erzeugung von LL(1) Übersetzungsschemata Beispiel S * { * } F {S 1.e := S.e * F.val} S 1 {S.s := S 1.s} ε {S.s := S.e} {), $, + } Steuermengen function S (Se: integer): integer; var Fval, S1e, Ss, S1s: integer; if symbol = *_sym then match(*_sym); Fval := F(); S1e := Se * Fval; S1s := S(S1e); Ss := S1s; return Ss; elsif symbol = )_sym or symbol = $_sym or symbol = +_sym Ss := Se; return Ss; else error; fi;

33 Bo8om- Up- ImplemenGerung von L- a8ribugerten Übersetzungsschemata Übersetzungsaktionen sind in die rechte Seite eingebettet. Sie sind zwar an Reduktionen gekoppelt, müssen aber ausgeführt werden bevor die komplette rechte Seite auf dem Stack liegt. D.h. die Ausführung muss vor der Reduktion erfolgen. A...... { action 1 }.... {action 2 }.... Einführung von Markierungsvariablen für semantische Aktionen. A...... M 1.... M 2.... M 1 ε { action 1 } S * M 2 ε { action 2 } F {S 1.e := S.e * F.val}..... S 1 {S.s := S 1.s} S *FMS 1 {S.s := S 1.s} M ε {S 1.e := S.e * F.val}

Ererbte A8ribuGerung und Bo8om- Up- Parsing 1/5 34 Den Attributen der Symbole auf der rechten Seite einer Produktion werden Werte zugewiesen. Diese Werte kommen von Attributen von links davon stehenden Symbolen und von ererbten Attributen der linken Seite der Produktion. A B C D E F E E.Attribute D C B D.Attribute C.Attribute B.Attribute D C B D.Attribute C.Attribute B.Attribute Attribute, die von den Geschwistern ererbt werden, sind bekannt, wenn E an der Spitze des Parser-Stapels auftaucht.

35 Beispiel: Ererbte A8ribuGerung und Bo8om- Up- Parsing - Übersetzungsschema Beispiel 1/4 Decl Type {VarList.type := Type.type} VarList ; Type integer {Type.type := integer} Type real {Type.type := real} VarList {VarList 1.type := VarList.type} VarList 1, Var {addtype(var.entry, VarList.type)} VarList Var {addtype(var.entry, VarList.type)} integer a, b, c;

36 Ererbte A8ribuGerung und Bo8om- Up- Parsing - Übersetzungsschema Beispiel 2/4 Decl Type type integer VarList ; type integer d integer VarList, Var type integer d entry integer VarList, Var type integer d entry integer Var entry integer

37 Ererbte A8ribuGerung und Bo8om- Up- Parsing - Übersetzungsschema Beispiel 3/4 Aktionen des Bottom-up-Parsers Stack Eingabe Reduktion integer a, b, c$ $ integer a, b, c$ Type integer $ Type a, b, c$ $ Type a, b, c$ VarList Var $ Type VarList, b, c$ $ Type VarList, b, c$ $ Type VarList, b, c$ $ Type VarList,, c$ VarList VarList, Var etc.

38 Ererbte A8ribuGerung und Bo8om- Up- Parsing - Übersetzungsschema Beispiel 4/4 Decl Type VarList ; Type integer {Attr[top] := integer} real {Attr[top] := real} VarList VarList 1, Var {addtype(attr[top], Attr[top-3])} VarList Var {addtype(attr[top], Attr[top-1])} Var, VarList Type top top-1 top-2 top-3 Var.entry integer Parserstapel Attributstapel

Nicht eindeugge Stack- PosiGonen 39 A BC {C.e := B.s} D BEC {C.e := B.s} C c {C.s := f(... C.e...)} 2 Situationen sind bei Reduktion mit C c möglich 1 C C.s:=? B B.Attribute top Benötigte Attribute liegen bei top-1 2 C C.s:=? E E.Attribute top Benötigte Attribute liegen bei top-2 B B.Attribute

Einsatz von Markierungsvariablen 40 Ererbte Attribute der linken Seite der Produktion bzw. von weiter links stehenden Symbolen der rechten Seite weitergeben mit Markierungsvariablen M i A X 1.... X n è A M 1 X 1.... M n X n A BC {C.e := B.s} D BEMC {M.e := B.s; C.e := M.s} C c {C.s := f(... C.e...)} M ε {M.s := M.e} C C.s:=? M M.Attribute E E.Attribute B B.Attribute top Benötigte Attribute liegen bei top-1

41 Ererbte A8ribute bei der Bo8om- up- Analyse Zusammenfassung 1/2 Ererbte Attribute von A liegen direkt unterhalb von B (evtl. wurde eine Markierung vorgenommen: X... MA..., M ε B A E Fall1: Die ererbten Attribute C.e müssen lediglich von anderen Attributen links von C kopiert werden. è Zugriffe über die bekannten Positionen dieser Attribute leicht möglich. Fall2: Ererbte Attribute C.e müssen erst errechnet werden, d.h. C.e := f(... D.a...). è Markierung setzen: A... MC... mit semantischen Aktionen: M.e := D.a C.e := M.s M ε mit semantischen Aktionen: M.s := f (... M.e...)

42 Ererbte A8ribute bei der Bo8om- up- Analyse Zusammenfassung 2/2 Markierung vorgenommen: A... M..., M ε spielen eine wichtige Rolle. Sie erlauben folgende Normierungen: Semantische Aktionen werden nur im Zusammenhang mit Reduktionen ausgeführt. Die Position von Attributen kann relativ zur Spitze des Attribut- Stacks vorab bestimmt werden. Ererbte Attribute können rechtzeitig berechnet werden. Aber... die Einführung von Markierungen zerstört evtl. die LR(1)-Eigenschaft.