Compilerbau. Bachelor-Programm. im SoSe Prof. Dr. Joachim Fischer Dr. Klaus Ahrens Dipl.-Inf. Ingmar Eveslage.
|
|
- Linus Fiedler
- vor 5 Jahren
- Abrufe
Transkript
1 Bachelor-Programm Compilerbau im SoSe 2014 Prof. Dr. Joachim Fischer Dr. Klaus Ahrens Dipl.-Inf. Ingmar Eveslage J.Fischer 13.1
2 Position 6.1 Überblick: Grammatik-basierte Übersetzung Kapitel 1 Compilationsprozess 6.2 Teil I Attribut-Grammatiken Die Programmiersprache Kapitel C 2 Formalismen zur Sprachbeschreibung Teil II 6.3 Methodische Grundlagen Kapitel des 3 Compilerbaus S-attributierte Syntaxdefitionen exikalische Analyse: der Scanner Teil III 6.4 Entwicklung ees efachen Kapitel 4 Transcompilers Syntaktische Analyse: der Parser -attributierte Syntaxdefitionen Kapitel Parser-Generatoren: Yacc, Bison Syntaxgesteuerte Übersetzungen im Überblick Kapitel 6 Kapitel 7 aufzeitsysteme Kapitel 8 Ausblick: Codegenerierung 6.6 Entwurf syntaxgesteuerter Übersetzungen 6.7 Symboltabelle 13.2
3 Synthetisierte und ererbte Attribute (Wdh.) nach Unterscheidung der Art der Attributberechnung Y 1.a= f( X.a ) Y 2.a= f( X.a ) Y 3.a= f( X.a ) Token (Termalsymbole) haben nur synthetisierte Attribute ihre Werte werden i.allg. vom Scanner geliefert Startsymbol ererbte Attribute Werte ererbter Attribute werden von oberen Knoten an untere zugewiesen (top-down) hat kee ererbten Attribute X Y 1 Y 2 Y 3 synthetisierte Attribute X Y 1 Y 2 Y 3 X Y 1 Y 2 Y 3 Werte synthetisierter Attribute werden von unten nach oben gereicht (bottom-up) X. a Y 1.a Y 2.a Y 3.a X.a= f(y 1.a,Y 2.a,Y 3.a) 13.3
4 Implementierung syntaxgesteuerter Defitionen (Wdh.) schwierig Implementierung ees Compilers, der eer beliebigen syntaxgesteuerten Defition folgt Klassifizierung syntaxgesteuerter Defitionen S-attributierte Defitionen (enthalten nur synthetisierte Attribute) können durch - und R-Parser on-the-fly ausgewertet werden synthetisierte Attribute X Y 1 Y 2 Y 3 X.a= f(y 1.a,Y 2.a,Y 3.a) - Parser kann Attribute der Metasymbole (RS) synchron zu den Metasymbolen auf dem Stack festhalten - bei eer Reduktion stehen dann diese Werte zur Verfügung, um die Attribute (S) zu bestimmen 13.4
5 Beispiel: Typdeklaration von Bezeichern syntaxgerichtete Defition Produktion D T T t T real 1, id id semantische Regel synthetisierte und ererbte Attribute Aufgabe der Regeln: Übernahme der Typformation ees Bezeichners aus eer Typdeklaration die Symboltabelle - Prüfen nicht, ob Bezeichner mehr als emal deklarariert worden ist - Reihenfolge der semantischen Aktionen ist zu bestimmen 13.5
6 Beispiel: Typdeklaration von Bezeichern Produktion D T T t T real 1, id id semantische Regel. := T.type T.type := teger T.type := real 1. :=. addtype (id.,.) addtype (id.,.) als geerbtes Attribut wird die Typformation top-down-artig im Baum verbreitet Hzufügen der Typformation zum vorhandenen Bezeichner id der Symboltabelle im Blattknoten Bewegung des Parsers T.type= real D.= real Egabe: real p, q, r real.= real, r.= real, p q Die -Knoten sorgen per addtype für die Aufnahme der Typfo des rechten Nachfolgers die Symboltabelle 13.6
7 Konstruktion des Abhängigkeitsgraphen Vorbereitung - jede Semantikregel wird folgende Funktions-Form gebracht: b:= f(c 1, c 2,..., c k ) synthetisiertes oder geerbtes Attribut von A Attribute der Grammatiksymbole der RS von Regel A a - der (Abhängigkeits-) Graph hat für jedes Attribut 1. een Knoten sowie 2. ee Kante von Knoten c i zum Knoten b, wenn b von c i abhängt 13.7
8 Konstruktion des Abhängigkeitsgraphen Beispielhafte Annahme: A X Y Produktion synthetisiertes Attribut semantische Regel A.a:= f (X.x, Y.y)... Idee: wird ee solche Regel beim Aufbau des Syntaxbaums benutzt, dann gibt es zwei gerichtete Verbdungen entsprechend der Datenflussrichtung X.x A.a Y.y 13.8
9 Algorithmus zur Konstruktion des Abhängigkeitsgraphen for each Knoten k syntaxbaum do for each Attribut a of GrammatikSymbol k do konstruiereknoten for a graph; for each Node k syntaxtree do for each semantischeregel b:= f(c 1, c 2,..., c n ) accociated with k do for i:= 1 to n do konstruierekante from Knoten k i of graph to Knoten b; danach: Durchführung eer topologischen Sortierung der Knoten Reihenfolge der Knoten bestimmt Reihenfolge der Attributberechnung 13.9
10 Beispiel: Konstruktion des Abhängigkeitsgraphen geg.: attributierter Syntaxbaum für Egabe: real p, q, r D 1.Schritt: Identifikation der Attribute im Baum T type real,, q r Produktion D T T t semantische Regel. := T.type T.type := teger p T real 1, id T.type := real 1. :=. addtype (id.,.) id addtype (id.,.) 13.10
11 Beispiel: Konstruktion des Abhängigkeitsgraphen D 2.Schritt: Eführung zusätzlicher Scheattribute s T type s real p s, s, q r Produktion D T T t T real 1, id semantische Regel. := T.type T.type := teger T.type := real 1. :=. addtype (id.,.) id addtype (id.,.) 13.11
12 Beispiel: Konstruktion des Abhängigkeitsgraphen D 3.Schritt: Konstruktion von Knoten je Attribut des Abhängigkeitsgraphen T type s real p s, s, q r Produktion D T T t T real 1, id semantische Regel. := T.type T.type := teger T.type := real 1. :=. addtype (id.,.) id addtype (id.,.) 13.12
13 Beispiel: Konstruktion des Abhängigkeitsgraphen 4. Schritt: Eführung von Kanten (Richtung entspr. Abhängigkeitsbeziehung) D T type s real p s, s, q r Produktion D T T t T real 1, id semantische Regel. := T.type T.type := teger T.type := real 1. :=. addtype (id.,.) id addtype (id.,.) 13.13
14 Beispiel: Konstruktion des Abhängigkeitsgraphen 4. Schritt: Fortsetzung D T type s real p s, s, q r Produktion D T T t T real 1, id semantische Regel. := T.type T.type := teger T.type := real 1. :=. addtype (id.,.) id addtype (id.,.) 13.14
15 Beispiel: Konstruktion des Abhängigkeitsgraphen 4. Schritt: Fortsetzung D T type s real p s, s, q r Produktion D T T t T real 1, id semantische Regel. := T.type T.type := teger T.type := real 1. :=. addtype (id.,.) id addtype (id.,.) 13.15
16 Beispiel: Konstruktion des Abhängigkeitsgraphen 4. Schritt: Fortsetzung D T type s real p s, s, q r Produktion D T T t T real 1, id semantische Regel. := T.type T.type := teger T.type := real 1. :=. addtype (id.,.) id addtype (id.,.) 13.16
17 Beispiel: Konstruktion des Abhängigkeitsgraphen 4. Schritt: Fortsetzung D T type s real p s, s, q r Produktion D T T t T real 1, id semantische Regel. := T.type T.type := teger T.type := real 1. :=. addtype (id.,.) id addtype (id.,.) 13.17
18 Beispiel: Konstruktion des Abhängigkeitsgraphen 4. Schritt: Fortsetzung D T type s real p s, s, q r Produktion D T T t T real 1, id semantische Regel. := T.type T.type := teger T.type := real 1. :=. addtype (id.,.) id addtype (id.,.) 13.18
19 Beispiel: Konstruktion des Abhängigkeitsgraphen fertig Abhängigkeitsbeziehung T type s real, r p s, s q Produktion D T T t T real 1, id semantische Regel. := T.type T.type := teger T.type := real 1. :=. addtype (id.,.) id addtype (id.,.) 13.19
20 Beispiel: Konstruktion des Abhängigkeitsgraphen 5.Schritt: Berechnungsreihenfolge der Attribute nach topologischer Sortierung ee topologische Sortierung ees gerichteten azyklischen Graphen ist irgendee Reihenfolge m 1, m 2,..., m k der Knoten m i des Graphen, so dass alle Kanten von Knoten ausgehen, die früher der Reihenfolge auftreten, und zu Knoten führen, die später vorkommen k i k j, mit k i vor k j, 13.20
21 Beispiel: Konstruktion des Abhängigkeitsgraphen T real 4 9 type p s 10 1, 7 s 8 5, q s r alle Kanten im Graphen führen von eem Knoten mit kleerer Nummer zu eem Knoten höherer Nummer Abhängigkeitsgraph ist topologisch sortiert 13.21
22 Beispiel: Konstruktion des Abhängigkeitsgraphen Ergebnis: Ausführungsreihenfolge semantischer Aktionen (1) a 1 := "p" (2) a 2 := "q" (3) a 3 := "r" (4) a 4 := real (5) a 5 := a 4 (6) (a 6 :=) addtype(r., a 5 ) (7) a 7 := a 5 (8) (a 8 :=) addtype(r., a 5 ) Attributwerte vom Scanner Attribut a i ist mit Knoten i im Abgängigkeitsgraphen assoziiert (9) a 9 := a 7 (10) (a 10 :=) addtype(r., a 5 ) mit Ausführung der Aktionen: Typ real wird Symboltabelleneträgen für p, q, r übernommen 13.22
23 Zusammenfassung: Attribut-Abhängigkeitsgraph Graph-Syntax Knoten repräsentieren Attribute Kanten repräsentieren Fluss der Werte wichtige Erkenntnis: Klassifizierung der Attribute duziert Abhängigkeitsgraphen Eigenschaften Graph ist spezifisch für jeden Parse-Baum Größe steht fester Beziehung zur Größe des Parse-Baumes Abhängigkeitsgraph kann zusammen mit Parse-Baum erzeugt werden Forderung: der Graph muss azyklisch se; Testverfahren brauchen exponentielle Zeit (~ Größe der syntaxgesteuerten Defition) Ausführungsreihenfolge Topologische Sortierung auf dem Abhängigkeitsgraphen, um die Attribute zu ordnen dieser Ordnung werden die semantischen Regeln ausgewertet Ordnung hängt sowohl von der Grammatik aus auch von der Egabe ab 13.23
24 Problem mit beliebigem Mix geerbter und synthetisierter Attribute (Wdh.) kee Garantie für Edeutigkeit der Reihenfolge der Attributberechnung Beispiel: A B A A.s B B.i A.s:= B.i B.i:= A.s + 1 Regeln können i.allg. zirkulär se Ziel: Formulierung von Eschränkungen bzgl. der Abhängigkeiten von Attributberechnungen, die ee Zirkelfreiheit garantieren 13.24
25 Zwischenfazit Suche nach Möglichkeit zur efachen Implementation von solchen syntaxgesteuerten Defitionen, die neben synthetisierten auch gewisse ererbte Attribute zulassen S-Attributgrammatik zwar effizient berechenbar, unterliegt aber gewissen Eschränkungen (für die Praxis nicht mächtig genug) efache Implementation wäre: natürliche Navigation durch Baumstrukturen: Tiefe-Zuerst (angewendet auf die Baumwurzel) FRAGE: Welche Art von Attributabhängigkeit wird dabei vorausgesetzt? ANTWORT: führt zur Defition von -attributierten syntaxgesteuerten Defitionen 13.25
26 -Attributgrammatiken Bei Verletzung der ksorientierung kee -Attributgrammatik Defition: -Attributgrammatik X Y 1 Y 2 Y 3 X Y 1 Y 2 Y 3 Sei X Y 1 Y 2 Y n ee Produktionsregel, ab dann hängen die ererbten Attribute von Y i (h(y i )) mit 1 i n nur von (1) den ererbten Attributen des Nicht-Termals X ( h(x) ) und (2) synthetisierten Attributen von Y 1 Y i-1 (also nur von denen, Spezialfall eer -Attributgrammatik ist ee S-Attributgrammatik die lks von Y i stehen) 13.26
27 -Attribut-Grammatiken und -Parser impliziert folgende (kanonische) Berechnungsreihenfolge für Top-Down-Parser: h(x), h(y 1 ), syn(y 1 ),, h(y n ), syn(yn), syn(x) bei Betreten ees Knoten: Berechnung der ererbten Attribute bei Verlassen ees Knoten: Berechnung der synthetisierten A. syn X h X Y 1 Y 2 Y n syn h syn h syn h syn h Y 1 Y 2 Y i Y n und dies stimmt mit der Auswertungsreihenfolge ees -Parser (Top-Down-Parsg) übere!! steht für ks bedeutet: die Attributformation»fließt«von lks nach rechts (als e natürliches Przip) 13.27
28 Position Kapitel Compilationsprozess Attributgrammatiken Teil I Die Programmiersprache Kapitel C Formalismen zur Sprachbeschreibung S-attributierte Syntaxdefitionen Teil II Methodische Grundlagen des Compilerbaus 6.4 Kapitel 3 Attributierte Syntaxdefitionen mit synthetisierten exikalische Analyse: der Scanner und ererbten Attributen Teil III Entwicklung ees efachen Kapitel 4 Transcompilers 6.5 Syntaktische Analyse: der Parser -attributierte Syntaxdefitionen Kapitel Parser-Generatoren: Yacc, Bison Verfahren syntaxgesteuerter Übersetzungen im Überblick Kapitel Überblick: Grammatik-basierte Übersetzung 6.7 Entwurf syntaxgesteuerter Übersetzungen Kapitel 7 aufzeitsysteme Kapitel 8 Ausblick: Codegenerierung 6.8 Drei-Adress-Code-Generierung (eige Aspekte) 6.9 Symboltabelle 13.28
29 Erkenntnis-1: Bedeutung Attributgrammatiken Zentrales Problem bei der Übersetzung/statischen Analyse: Assoziation von Informationen zu Teilstrukturen des Ableitungsbaums Verwaltung der Informationen beim Aufbau des Baumes Attributgrammatiken als geeignetes Konzept Attribute als Info-Behälter für jedes Grammatiksymbol Beispiel: Typfos, Ausdruckswerte (als Zwischenresulte ees Interpreters) jeder Produktion der Grammatik kann ee Menge von Funktionen als semantische Regel zugeordnet werden Berechnung der Attribute erfolgt aus den Werten von Attributen anderer, der Produktion vorkommenden Symbole 13.29
30 Erkenntnis-2: Implementierung syntaxgesteuerter Defitionen ~ Art der Attributierung Klassifizierung syntaxgesteuerter Defitionen S-attributierte Defitionen (enthalten nur synthetisierte Attribute) -attributierte Defitionen (enthalten nur synthetisierte u. ererbte Attribute mit Nebenbedgung) können durch R-Parser on-the-fly ausgewertet werden??? als Mehrpass-Compiler (Abhängigkeitsgraph) können durch -Parser on-the-fly ausgewertet werden 13.30
31 Jetzt genauer Parsertyp Grammatiktyp Attributierungstyp Realisierungsmöglichkeiten /Probleme
32 Übersetzungsmethoden: on-the-fly Rekursiv-absteigender Parser -Grammatik mit eer -Attributierung (direkte Interpretation möglich) Methode: Funktionen des rekursiv absteigenden Parsers werden erweitert: Tabellengesteuerter Top-Down-Parser -Grammatik mit eer -Attributierung (direkte Interpretation möglich) Bottom-Up-Parser R-Grammatik mit eer S-Attributierung (direkte Interpretation möglich) ererbte Attribute werden zu Funktionsargumenten ihrer Nichttermalsymbole (die aufgerufene Funktion erbt Informationen ihres Aufrufers) synthetisierte Attribute werden von diesen Funktionen als Kollektion zurückgegeben. Bottom-Up-Parser -Grammatik mit eer -Attributierung (direkte Interpretation möglich) 13.32
33 Methode rekursiv absteigender Parser void A () { /*Choose an A-production, A X 1 X 2 X k ;*/ for ( i:= 1 to k) { if ( X i is a_nontermal ) call procedure X i (); else if (X i = current put symbol a) } } advance put to the next symbol; else /* error */ jetzt: Sematik-Aktionen: on-the-fly Vorbereitung Argumente von A: geerbte Attribute vom A-Caller Return-Wert von A: Kollektion der synthetisierten Attribute von A Funktion hält für jedes Attribut aller Nichttermalsymbole der A-Produktion ee lokale Variable Przip der Verarbeitung Betrachtung der Symbole/Aktionen X der rechten Seite der A-Produktion von lks nach rechts: Sei X e Termalsymbol mit dem synthetisierten Attribut x, dann wird der Wert X.x eer entsprechenden lokalen Variable gespeichert anschließend: Match von X und Aktualisierung der Egabe Sei X e Nichttermal B, erfolgt ee Zuweisung c:= B(b 1, b 2, b n ) mit b i als Variable der geerbten Attribute für B c als lokale A-Variable zur Aufnahme des synthetisierten Attributs von B Sei X ee Aktion, wird der Code kopiert und jede Referenz auf e Attribut wird durch die lokale Variable für dieses Attribut ersetzt 13.33
34 Beispiel Konstruktion ees rekursiv-absteigenden Parsers mit Auswerter der semantischen Regeln kann nun nach dem Kochrezept umgesetzt werden Produktion E E 1 + T E E 1 - T E T T (E) T number Semantische Regel E.val:= E 1.val + T.val E.val:= E 1.val - T.val E.val:= T.val T.val:= E.val T.val:= number.val Produktion E T {R.i:= T.val} R {E.val:= R.s} R + T {R 1.i:= R.i + T.val} R 1 {R.s:= R 1.s} R - T {R 1.i:= R.i - T.val} R 1 {R.s:= R 1.s} R e {R.s:= R.i} T (E {T.val:= E.val} ) T number {T.val:= number.val} attributierter Baum für 3+5 digit T Tval= 3 digit.lexval=3 lksrekursiv, S-attributiert Bei Entfernung der ksrekursion ändert sich die Attributierung: neues Symbol R mit zwei Attributen: i, s E rechtsrekursiv, -attributiert E.val= 8 + R R.i= 3 R.s= 8 T T.val=5 digit.lexval=5 R 1 R 1.i= R 1.s= 8 e 13.34
35 Anwendung der Methode E T {R.i:= T.val} R {E.val:= R.s} Vorbereitung Argumente von A: geerbte Attribute vom A-Caller Return-Wert von A: Kollektion der synthetisierten Attribute von A Funktion hält für jedes Attribut aller Nichttermalsymbole der A-Produktion ee lokale Variable procedure E(): t { t Tval, Eval, Rs, Ri; } Tval:= T(); Ri:= Tval; Rs:= R(Ri); Eval:= Rs; return (Eval); 13.35
36 Anwendung der Methode E T {R.i:= T.val} R {E.val:= R.s} procedure E(): t { t Tval, Eval, Rs, Ri; } Tval:= T(); Ri:= Tval; Rs:= R(Ri); Eval:= Rs; return (Eval); T hat kee ererbten Attribute Vorbereitung Argumente von A: geerbte Attribute vom A-Caller Return-Wert von A: Kollektion der synthetisierten Attribute von A Funktion hält für jedes Attribut aller Nichttermalsymbole der A-Produktion ee lokale Variable Przip der Verarbeitung Betrachtung der Symbole/Aktionen X der rechten Seite der A-Produktion von lks nach rechts: Sei X e Termalsymbol mit dem synthetisierten Attribut x, dann wird der Wert X.x eer entsprechenden lokalen Variable gespeichert anschließend: Match von X und Aktualisierung der Egabe Sei X e Nichttermal B, erfolgt ee Zuweisung c:= B(b 1, b 2, b n ) mit b i als Variable der geerbten Attribute für B c als lokale A-Variable zur Aufnahme des synthetisierten Attributs von B Sei X ee Aktion, wird der Code kopiert und jede Referenz auf e Attribut wird durch die lokale Variable für dieses Attribut ersetzt 13.36
37 Anwendung der Methode E T {R.i:= T.val} R {E.val:= R.s} procedure E(): t { t Tval, Eval, Rs, Ri; } Tval:= T(); Ri:= Tval; Rs:= R(Ri); Eval:= Rs; return (Eval); Vorbereitung Argumente von A: geerbte Attribute vom A-Caller Return-Wert von A: Kollektion der synthetisierten Attribute von A Funktion hält für jedes Attribut aller Nichttermalsymbole der A-Produktion ee lokale Variable Przip der Verarbeitung Betrachtung der Symbole/Aktionen X der rechten Seite der A-Produktion von lks nach rechts: Sei X e Termalsymbol mit dem synthetisierten Attribut x, dann wird der Wert X.x eer entsprechenden lokalen Variable gespeichert anschließend: Match von X und Aktualisierung der Egabe Sei X e Nichttermal B, erfolgt ee Zuweisung c:= B(b 1, b 2, b n ) mit b i als Variable der geerbten Attribute für B c als lokale A-Variable zur Aufnahme des synthetisierten Attributs von B Sei X ee Aktion, wird der Code kopiert und jede Referenz auf e Attribut wird durch die lokale Variable für dieses Attribut ersetzt 13.37
38 Anwendung der Methode E T {R.i:= T.val} R {E.val:= R.s} procedure E(): t { t Tval, Eval, Rs, Ri; } Tval:= T(); Ri:= Tval; Rs:= R(Ri); Eval:= Rs; return (Eval); Vorbereitung Argumente von A: geerbte Attribute vom A-Caller Return-Wert von A: Kollektion der synthetisierten Attribute von A Funktion hält für jedes Attribut aller Nichttermalsymbole der A-Produktion ee lokale Variable Przip der Verarbeitung Betrachtung der Symbole/Aktionen X der rechten Seite der A-Produktion von lks nach rechts: Sei X e Termalsymbol mit dem synthetisierten Attribut x, dann wird der Wert X.x eer entsprechenden lokalen Variable gespeichert anschließend: Match von X und Aktualisierung der Egabe Sei X e Nichttermal B, erfolgt ee Zuweisung c:= B(b 1, b 2, b n ) mit b i als Variable der geerbten Attribute für B c als lokale A-Variable zur Aufnahme des synthetisierten Attributs von B Sei X ee Aktion, wird der Code kopiert und jede Referenz auf e Attribut wird durch die lokale Variable für dieses Attribut ersetzt 13.38
39 Anwendung der Methode E T {R.i:= T.val} R {E.val:= R.s} procedure E(): t { t Tval, Eval, Rs, Ri; } Tval:= T(); Ri:= Tval; Rs:= R(Ri); Eval:= Rs; return (Eval); Vorbereitung Argumente von A: geerbte Attribute vom A-Caller Return-Wert von A: Kollektion der synthetisierten Attribute von A Funktion hält für jedes Attribut aller Nichttermalsymbole der A-Produktion ee lokale Variable Przip der Verarbeitung Betrachtung der Symbole/Aktionen X der rechten Seite der A-Produktion von lks nach rechts: Sei X e Termalsymbol mit dem synthetisierten Attribut x, dann wird der Wert X.x eer entsprechenden lokalen Variable gespeichert anschließend: Match von X und Aktualisierung der Egabe Sei X e Nichttermal B, erfolgt ee Zuweisung c:= B(b 1, b 2, b n ) mit b i als Variable der geerbten Attribute für B c als lokale A-Variable zur Aufnahme des synthetisierten Attributs von B Sei X ee Aktion, wird der Code kopiert und jede Referenz auf e Attribut wird durch die lokale Variable für dieses Attribut ersetzt 13.39
40 procedure T(): t { t Tval, Eval, numberval; } if token == "(" then { nexttoken(); } Eval:= E(); Tval:= Eval(); if not (token == ")" ) then else { } error(); else if token == number then { } else error(); nexttoken(); return (Tval); numberval:= lexval; nexttoken(); Tval:= numberval; return (Tval); procedure E(): t { t Tval, Eval, Rs, Ri; } Tval:= T(); Ri:= Tval; Rs:= R(Ri); Eval:= Rs; return (Eval); Produktion E T {R.i:= T.val} R {E.val:= R.s} R + T {R 1.i:= R.i + T.val} R 1 {R.s:= R 1.s} R - T {R 1.i:= R.i - T.val} R 1 {R.s:= R 1.s} R e {R.s:= R.i} T (E {T.val:= E.val} ) T number {T.val:= number.val} procedure R (t Ri): t { t Rs, Tval, R1s, R1i; } if token == "+" then { } nexttoken(); Tval:= T(); R1i:= Ri + Tval; R1s:= R (R1i); Rs:= R1s; return (Rs); else if token == "-" then nexttoken(); Tval:= T(); R1i:= Ri - Tval; R1s:= R (R1i); Rs:= R1s; return (Rs); } else if token == ")" or token == "$" then { } else error(); Rs:= Ri; return (Rs); 13.40
41 Übersetzungsmethoden: on-the-fly Rekursiv-absteigender Parser -Grammatik mit eer -Attributierung (direkte Interpretation möglich, hausgemacht ) Tabellengesteuerter Top-Down-Parser -Grammatik mit eer -Attributierung (direkte Interpretation möglich) Methode: Hzunahme ees Werte-Kellers (wie bei S-Attributierung und R-Parser) Bottom-Up-Parser R-Grammatik mit eer S-Attributierung (direkte Interpretation möglich, hausgemacht ) aber schwieriger zu verwalten Wertekeller wächst und schrumpft nicht synchron zum Parser-Stack Bottom-Up-Parser -Grammatik mit eer -Attributierung (direkte Interpretation möglich) 13.41
42 Top-Down-Implementierung -attributierter Syntaxschemata (2) iegt der -attributierten syntaxbasierten Defition ee -Grammatik zugrunde, kann die Implementation (Ausführung der Aktionen) mit eem tabellengesteuerten -Parser erfolgen. Rekords für synthetisierte Attribute ees Nichttermalsymbols werden unterhalb des Nichttermalsymbols/Zustand auf dem Parser-Keller abgelegt, die ererbten Attribute ees Nichttermalsymbols werden synchron mit dem Nichttermalsymbol/Zustand (im Werte-Keller) abgelegt werden. Auch die Aktionen werden im Keller platziert, um die Attribute wie gefordert zu berechnen. wollen wir hier aber nicht weiter vertiefen 13.42
43 Übersetzungsmethoden: on-the-fly Rekursiv-absteigender Parser -Grammatik mit eer -Attributierung (direkte Interpretation möglich) Tabellengesteuerter Top-Down-Parser -Grammatik mit eer -Attributierung (direkte Interpretation möglich) Bottom-Up-Parser R-Grammatik mit eer S-Attributierung (direkte Interpretation möglich) Bottom-Up-Parser -Grammatik mit eer -Attributierung (direkte Interpretation möglich) Methode: E S-attributiertes Übersetzungsschema kann implementiert werden, wenn alle Aktionen am Ende von Produktionen stehen. Die Aktionen berechnen dabei die synthetisierten Attribute der RS aus den synthetisierten Attributen der S der Regeln. Ist die Ausgangsgrammatik vom Typ R, dann kann dieses Übersetzungsschema auf dem R- Parser-Kellerspeicher umgesetzt werden
44 R-Parser mit S-attributierter Übersetzung %{ #clude <ctype.h> %} %token DIGIT Bison-Notation %% le: expr '\n' {prtf("%d\n", $1); } ; expr: expr '+' expr {$$ = $1 + $3; } term ; term: term '*' factor {$$ = $1 * $3; } factor ; factor: '(' expr ')' {$$ = $2; } DIGIT ; Produktion E n E E 1 + T -Grammatik R-Parser E T T T 1 * F T F F (E) F digit prt(val[tos]) syntaxgesteuerte Defition (S-Attributgrammatik) Semantische Regel val[ntos] := val[tos-2] + val[tos] val[ntos]:= val[tos-2] * val[tos] val[ntos] := val[tos-1] ermöglicht durch ee Erweiterung des Kellerspeichers, bei natürlicher Synchronität von Attribut-Werte-Stack und Parser-Stack zirkuläre syntaxorientierte Defitionen 13.44
45 Bottom-up-Analyse passt (tuitiv) zur S-Attributierung man arbeitet von unten nach oben Frage ässt sich -Attributberechnung und Bottom-up-Syntaxanalyse trotzdem kombieren? Jetzt R und Verallgemeerung der Methode R-Parser und S-Attributierung Attribute werden parallel zum Zustand e- bzw. ausgekellert Diese wird mächtig genug se, um -attributierte Defitionen, die auf eer (1)-Grammatik aufbauen, on-the-fly zu behandeln
46 Übersetzungsmethoden: on-the-fly Rekursiv-absteigender Parser: -Grammatik mit eer -Attributierung (direkte Interpretation möglich) Tabellengesteuerter Top-Down-Parser: -Grammatik mit eer -Attributierung (direkte Interpretation möglich) Bottom-Up-Parser R-Grammatik mit eer S-Attributierung (direkte Interpretation möglich) Methode Grammatik-Transformation: Eführung neuer Nichttermalsymbole als Marker Simulation ererbter Attribute durch synthetische Attribute der Marker Bottom-Up-Parser -Grammatik mit eer -Attributierung (direkte Interpretation möglich) 13.46
47 Konvertierungsprzip Übersetzungsschema A {B.i = f(a.i);} B C ACHTUNG auf den ersten Blick problematisch! Aktionen für M e haben keen Zugriff auf Attribute, die zu Grammatiksymbolen gehören, die nicht zu dieser Produktion gehören Eführung ees Markers M mit zwei Attributen i Kopie von A.i M s Stellvertreter für B.i Übersetzungsschema A M B C M e {M.i=A.i; M.s= f(a.i);} JEDOCH Implementation der Aktionen auf eem R-Parser- Kellerspeicher werden sehen, dass diese Attribute tatsächlich noch auf dem Keller liegen ATERNATIVER ANSATZ A müsste vorsorglich dafür sorgen, dass für andere Symbole (hier M), die die ererbten Attribute benötigen, diese globalen Speichern bereit gestellt werden Wie kommt man an diese Information? 13.47
48 Stack-Indizierung Yacc/Bison (bereits bekannt) jedes Grammatiksymbol hat im Rahmen eer Regelanwendung een semantischen Wert erreichbar über $i Notation Beispiel E E + E {$$ = $1 + $3;} E * E {$$ = $1 * $3; } num {$$ = $1;} ; neben Parser-Keller (Zustandskeller) gibt es een synchronen Wertekeller die Pseudovariable $i bezieht sich auf: tos ( RS -i) im Wertekeller $$ bezieht sich auf Wert des Nichttermalsymbols der S 13.48
49 Stack-Indizierung Yacc/Bison (neu) $i ist auch für i 0 defiert bezieht sich auf Wertekellerpositionen bevor die aktuelle Regel zur Anwendung gekommen ist ACHTUNG: natürlich muss der Kontext beim Zugriff bekannt se $0 F : E B + E { $$ =... } ; B : /* empty */ { temp_val= $0 ;} $0 refers to value of F the previous production 13.49
50 Zwischenfazit zwei Möglichkeiten Bison a) direkter Zugriff auf Kellerposition mit Index- u. Typunsicherheit b) Verwendung globaler Größen geg. -attributierte syntaxgesteuerte Defition (auf Basis eer -Grammatik) dann lässt sich bei Grammatik-Adaption die Defition auch für ee R-Analyse esetzen Methode (1) Starte mit Übersetzungsschema, das egebettete Aktionen vor dem Nichttermal platziert, um ererbte Attribute zu berechnen: A a {a} b (2) Führe jeweils verschiedene Nichttermalsymbole M zur Markierung der Position der zu verschiebenden egebetteten Aktionen e: A a M b Dabei ist jedes M nur mit eer Produktion auszustatten: M e, wobei die Aktionen a ans Ende der rechten Seite platziert werden: M e {a} (3) Modifiziere dabei die Aktion a zu a', so dass alle Attribute von A oder Attribute von Symbolen aus a, die von a benötigt werden, als ererbte Attribute von M kopiert werden Berechne die Attribute so wie a, aber mache diese zu synthetisierten Attributen von M 13.51
51 nachdem Syntaxbäume aufgebaut sd, kann man sowohl Analyse- als auch Synthese-Aufgaben realisiert werden Ziel des nächsten Unterkapitels: semantische Aktionen zur Baumbearbeitung mit dem Nebeneffekt: Ausgabe von 3-Adress-Code (als beliebte Zwischencode-Form für Back-End-Tools)
52 Zwischencode-Erzeugung Symboltabellenverwaltung Quellprogramm lexikalische Analyse Syntaxanalyse semantische Analyse ZwC- Generator Zwischencode Fehlerbehandlung Anforderungen an den Zwischencode - leicht zu erzeugen - leicht transformierbar den letztendlichen Zielcode durch das Backend Zwischencode kann verschiedene Formen haben. temp1:= ttoreal(60) temp2:= id3 * temp1 temp3:= id2 + temp2 id1 := temp
53 Position Kapitel Compilationsprozess Attributgrammatiken Teil I Die Programmiersprache Kapitel C Formalismen zur Sprachbeschreibung S-attributierte Syntaxdefitionen Teil II Methodische Grundlagen des Compilerbaus 6.4 Kapitel 3 Attributierte Syntaxdefitionen mit synthetisierten exikalische Analyse: der Scanner und ererbten Attributen Teil III Entwicklung ees efachen Kapitel 4 Transcompilers 6.5 Syntaktische Analyse: der Parser -attributierte Syntaxdefitionen Kapitel Parser-Generatoren: Yacc, Bison Verfahren syntaxgesteuerter Übersetzungen im Überblick Kapitel Überblick: Grammatik-basierte Übersetzung 6.7 Entwurf syntaxgesteuerter Übersetzungen Kapitel 7 aufzeitsysteme Kapitel 8 Ausblick: Codegenerierung 6.8 Drei-Adress-Code-Generierung (eige Aspekte) 6.9 Symboltabelle 13.54
54 Drei-Adressbefehle (beliebte Zwischencodeform) x = y op z x = op y // op bärer Operator, x, y, z Adressen // op unärer Operator allg. Format x = y // Kopierbefehl goto if x goto if False x goto // unbedgter Sprung zur Marke im Programm // bedgte Sprünge Marke kann jedem Befehl als Präfix : hzugefügt werden if x relop y goto // bedgter Sprung mit Vergleich mit relop als Vergleichsoperator x = y[i] y[i] = x //Kopierbefehl mit Indizes x = &y x = *y *y= x // Kopierbefehl mit Adressrechnung 13.55
55 Beispiel-1: DreiAdress-Code (FOR-Anweisung) FOR-Schleife a=3; b=4; for(i=0;i<n;i++){ a=b+1; a=a*a; } c=a; 3-Adresscode a=3; b=4; i=0; 1: VAR1=i<n; if(var1) goto 2; goto 3; 4: i++; goto 1; 2: VAR2=b+1; a=var2; VAR3=a*a; a=var3; goto 4 3: c=a; 13.56
56 Beispiel-2: DreiAdress-Code (WHIE-Anweisung) WHIE-Schleife a=3; b=4; i=0; while(i<n){ a=b+1; a=a*a; i++; } c=a; 3-Adresscode a=3; b=4; i=0; 1: VAR1=i<n; if(var1) goto 2; goto 3; 2: VAR2=b+1; a=var2; VAR3=a*a; a=var3; i++; goto 1 3: c=a; 13.57
57 Vorbereitung zur Übersetzung DreiAdress-Code jedes Nichttermalsymbol der WHIE-Anweisungs-Regel erhält für Code-Generierung folg. Attribute: code: enthält den generierten 3ACode true: enthält Marke für Sprung mit assoziiertem Boolean-Ausdruck (falls true) false: (falls false) next: enthält Marke für Statement, das aus dem Nichttermalsymbol abgeleitet wird benutzte Funktion: newabel(): liefert bei jedem Aufruf neue Marke gen( ): generiert Code (als Strg), der als Parameter übergeben wird 13.58
58 Beispiel: WHIE-Statement-Übersetzung DreiAdress-Code S if C then S1 S if C then S1 else S2 S while C do S1 S assign-stmt P S { } S.next:= newabel ; P.code:= S.code gen (S.next : ) ; Bem.: konzentrieren uns lediglich auf den Programmfluss, (blenden hier Zwischencode für andere Teile aus) lokalevariable S while E do S1 { 1:= newabel ; 2:= newabel ; C.false := S.next ; S1.next := 1 ; C.true := 2 ; S.code := gen(1, : ) C.code gen(2, : ) S1.code ; } code true false next 13.59
59 Attributierung zur Code-Repräsentation Ann.: Unsere code-attribute der Meta-Symbole sd alle vom Typ strg (anschaulich, aber praktisch effizient) eigentliche Anforderung: Werte von code müssen sich nur efach verketten lassen (so wäre przipiell ee iste beliebigen Typen denkbar) next true false code Bem.: praktisch teressantere ösung wäre die sequentielle Ausgabe der Code- Stücke ee Datei (zeigen wir später) 13.60
60 Implementierung attributierter Übersetzungsschemata Problem: R-Grammatik + -attr.syntaxdef 1 : E-Code (next, 2) 2 : S1-Code (1) next: S while ( C ) S1 1= newabel(); 2= newabel(); S1.next= 1; C.false= S.next; C.true=2; S.code= gen(1, : ) C.code gen(2, : ) S1.code Behandlung der Marken 1, 2 diese sd Variablen, kee Attribute (so wie next) Übersetzungsschema ist zu transformieren S while ( { 1=newabel(); 2= newabel(); C.false= S.next; C.true=2; } C ) {S1.next= 1; } S1 {S.code= gen(1, : ) C.code gen(2, : ) S1.code } S while ( M C ) N S1 {S.code= gen(1, : ) C.code gen(2, : ) S1.code } M e {1=newabel(); 2= newabel(); C.false= S.next; C.true=2; } N e {S1.next= 1; } 13.61
61 Konvertierungsprzip (Ernerung) Übersetzungsschema A {B.i = f(a.i);} B C Eführung ees Markers M mit zwei Attributen i Kopie von A.i M s Stellvertreter für B.i Übersetzungsschema A M B C M e {M.i=A.i; M.s= f(a.i);} Wie kommt man an diese Information? 13.62
62 Schritte des R-Parsers (1) tos Egabe while ( C ) S1? Kellerbelegung unmittelbar vor der Erkennung von while S.next? tos while Sprungmarke als symbolisches Ende der aktuellen Anweisung S existiert bereits, wurde aber noch nicht im generierten Code verwendet!!! S.next Kellerbelegung sobald while aktuelles Egabe-Token wird man kennt zwar nicht den darunter liegenden Zustand bzw. das entspr. Nichttermalsymbol, aber es hat e synchron gespeichertes Datenrekord, das auf eer festen Position Form von S.next vorliegt 13.63
63 Schritte des R-Parsers (2) Egabe while ( C ) S1 R-Parser weiß, dass - es sich nach esen von ( um ee while-anweisung handelt - und wird dieser Situation ee Reduktion von e nach M durchführen - danach wird der Egabecode, der später C ergibt, analysiert? S.next while feste tos Positionen ( M C.true C.false 1 2 tos 2 S.next S while ( M C ) N S 1 { } M e { } N e { } M-Aktionen 1:= newabel(); 2:= newabel(); C.false:= stack[tos-3].next; C.true:= 2; 1 : C-Code (next, 2) 2 : S1-Code (1) next: ursprüngliche Aktionen zur Berechnung der ererbten Attribute von C werden jetzt zu Aktionen von M /*S.next*/ 13.64
64 Schritte des R-Parsers (3) tos tos? while ( M C ) N S.next C.true 2 C.code S1.next C.false 1 S.next S1.next= stack[tos-3].1; 2 N e { } Ann.: nächste Egabesymbole nach ( (Bool-Ausdruckskomponenten) können zu C reduziert werden; das synthetisierte Attribut C.code ist im Datenrecord von C enthalten (wird erzeugt) ) wird auf den Stack geschoben Parser weiß, dass er noch immer ee while-anweisung bearbeitet (-Grammatik) und wird e zu N reduzieren und die zugeordnete Aktion ausführen (hterlegt für kommende S1-Analyse 1 als Rücksprungmarke) 13.65
65 Schritte des R-Parsers (3) Egabe while ( C ) S1 tos? S.next 1 : C-Code (next, 2) 2 : S1-Code (1) next: while S ( M C.true C.false S1-Analyse + Code-Erzeugung (synthetisiert S1.code) Parser-Reduktion: S while ( M C ) N S1 { } Ausführung von { } S.next C C.code ) N S1.next 1 tempcode:= gen(stack[tos-4].1, : ) stack[tos-3].code label stack[tos-4].2 stack[tos].code tos:= tos-6 stack[tos].code:= tempcode? S.next while tos S.code tempcode S while ( M C ) N S 1 { } M e { } N e { } S.next= abel für Sprungmarke als symbolischer Anfang der nächsten Anweisung S (== Ende der while-anweisung) S1 S1.code 13.66
1 Attributierte Grammatiken. 2 Zyklische AG. 3 Codeerzeugung mit AGs. Zusatzfolien Semantische Analyse Wintersemester 2008/09 1 / 28
1 Attributierte Grammatiken 2 Zyklische AG 3 Codeerzeugung mit AGs Zusatzfolien Semantische Analyse Wintersemester 2008/09 1 / 28 Beispiel: Taschenrechner mit Attributierter Grammatik Produktion Semantische
MehrCompilerbau. Bachelor-Programm. im SoSe Prof. Dr. Joachim Fischer Dr. Klaus Ahrens Dipl.-Inf. Ingmar Eveslage.
Bachelor-Programm Compilerbau im SoSe 2014 Prof. Dr. Joachim Fischer Dr. Klaus Ahrens Dipl.-Inf. Ingmar Eveslage fischer@informatik.hu-berlin.de J.Fischer 12.1 Position 6.1 Überblick: Grammatik-basierte
MehrKapitel 5: Semantische Analyse
Kapitel 5: Semantische Analyse Prinzip Operationen der Übersetzung werden an die Grammatik gebunden -> Compiler-Generatoren Themen Attributierte Grammatik Mehrpass - Compiler - Generatoren Symboltabelle
MehrSYNTAXGESTEUERTE ÜBERSETZUNG
4. Kapitel SYNTAXGESTEUERTE ÜBERSETZUNG Compilerbau Prof. Dr. Wolfgang Schramm Weitere Arbeitsschri8e 1 Erledigt: Quellprogramm kann lexikalisch und syntakgsch analysiert werden, ein Ableitungsbaum kann
MehrPraktikum Compilerbau Sitzung 4 Abstrakter Syntaxbaum
Praktikum Compilerbau Sitzung 4 Abstrakter Syntaxbaum Prof. Dr.-Ing. Gregor Sneltg Andreas Zwkau IPD Sneltg, Lehrstuhl für Programmierparadigmen KIT Universität des Landes Baden-Württemberg und nationales
MehrZwischencode-Erzeugung. 2. Juni 2009
Zwischencode-Erzeugung im Rahmen des Seminars "Übersetzung von künstlichen Sprachen" Sebastian Hanneken 2. Juni 2009 1 / 32 1 Einleitung Einordnung Funktion von Zwischencode 3-Adresscode (3AC) 2 Erzeugung
MehrKapitel 4. Attributierte Grammatiken. Attributierte Grammatiken Wintersemester 2009/10 1 / 64
Kapitel 4 Attributierte Grammatiken Attributierte Grammatiken Wintersemester 2009/10 1 / 64 Kapitel 4: Attributierte Grammatiken 1 Einführung 2 Beispiele Taschenrechner AST-Aufbau Typdeklarationen Schriftsatz
MehrKapitel 4. Attributierte Grammatiken. Attributierte Grammatiken Sommersemester / 66
Kapitel 4 Attributierte Grammatiken Attributierte Grammatiken Sommersemester 2012 1 / 66 Kapitel 4: Attributierte Grammatiken 1 Einführung 2 Beispiele Taschenrechner AST-Aufbau Typdeklarationen Schriftsatz
MehrCompilerbau für die Common Language Run-Time
Compilerbau für die Common Language Run-Time Syntax und Semantik von Programmiersprachen 2 Compilerbau Sprachbeschreibung vs. Implementierung Beschreibung: formale oder informale (engl.) Lexik, Syntax,
MehrInhalte der Vorlesung. 6. Syntaxgesteuerte Übersetzung. Attributierter Syntaxbaum. 6. Syntaxgesteuerte Übersetzung
Inhalte der Vorlesung 6. Syntaxgesteuerte Übersetzung 1.Einführung 2.Lexikalische Analyse 3.Der Textstrom-Editor sed 4.Der Scanner-Generator lex 5.Syntaxanalyse und der Parser-Generator yacc 6.Syntaxgesteuerte
MehrAttributierte Grammatiken
Attributierte Grammatiken Form: kontextfreie Produktionsregeln Attribute: eine Reihe von Variablen für jedes Grammatiksymbol für jede Produktion: Auswertungsregeln: bestimmen Berechnung der Attribute Bedingungen:
Mehr7. Optimierung. Verschiedene Hilfsmittel zur Entscheidung der Optimierungsfrage:
Verschiedene Hilfsmittel zur Entscheidung der Optimierungsfrage: abstrakte Interpretation Datenflußanalysen wie: lebendige Variablen ankommende Definitionen verfügbare Ausdrücke wichtige Ausdrücke Beispiel
MehrCompilerbau. Bachelor-Programm. im SoSe Prof. Dr. Joachim Fischer Dr. Klaus Ahrens Dipl.-Inf. Ingmar Eveslage.
Bachelor-Programm Compilerbau im SoSe 2014 Prof. Dr. Joachim Fischer Dr. Klaus Ahrens Dipl.-Inf. Ingmar Eveslage fischer@informatik.hu-berlin.de J.Fischer 11.1 4.6.4 LR(1) - Syntaxanalyse Motivation für
MehrCompilerbau. Bachelor-Programm. im SoSe Prof. Dr. Joachim Fischer Dr. Klaus Ahrens Dipl.-Inf. Ingmar Eveslage.
Bachelor-Programm Compilerbau im SoSe 2014 Prof. Dr. Joachim Fischer Dr. Klaus Ahrens Dipl.-Inf. Ingmar Eveslage fischer@informatik.hu-berlin.de J.Fischer 14.1 Position Kapitel 1 6.2 Compilationsprozess
MehrAttributgrammatiken -Spezifikation der statischen Semantik von Programmiersprachen-
Attributgrammatiken -Spezifikation der statischen Semantik von Programmiersprachen- Hauptseminar Sven Karol 1 Inhalt Einleitung Entstehungsgeschichte und Motivation Einordung Formalismen Erweiterung kontextfreier
MehrDefinition Compiler. Bekannte Compiler
Compiler Inhalt: Definition Compiler / bekannte Compiler Klassifikationen von Compilern Analyse-Synthese-Modell der Kompilierung Analyse des Quellprogramms Synthesephase Die Phasen eines Compilers Symboltabellenverwaltung
MehrInhalte der Vorlesung. 6. Syntaxgesteuerte Übersetzung. 6. Syntaxgesteuerte Übersetzung. Attributierter Syntaxbaum
Inhalte der Vorlesung 6. Syntaxgesteuerte Übersetzung 1.Einführung 2.Lexikalische Analyse 3.Der Textstrom-Editor sed 4.Der Scanner-Generator lex (2 Termine) 5.Syntaxanalyse und der Parser-Generator yacc
MehrCompilerbau. Bachelor-Programm. im SoSe Prof. Dr. Joachim Fischer Dr. Klaus Ahrens Dr. Andreas Kunert Dipl.-Inf.
Bachelor-Programm Compilerbau im SoSe 2014 Prof. Dr. Joachim Fischer Dr. Klaus Ahrens Dr. Andreas Kunert Dipl.-Inf. Ingmar Eveslage fischer@informatik.hu-berlin.de J.Fischer 6.1 Position Kapitel 1 Compilationsprozess
MehrEinführung in den Compilerbau
Einführung in den Compilerbau Semantische Analyse und (abstakte) Codeerzeugung mit Ergänzungen zur (Bottom-Up) Syntaxanalyse Dr. Armin Wolf 8. Vorlesung SoSe 2010, Universität Potsdam 1 Konzept der Syntaxgesteuerte
Mehr5. Syntaxanalyse und der Parser-Generator yacc. 5.5 Aufsteigende Analyse. Absteigende Analyse versus aufsteigende Analyse. 5.5 Aufsteigende Analyse
5. Syntaxanalyse und der Parser-Generator yacc 5.1 Einleitung 5.2 Kontextfreie Grammatiken 5.3 Grundlagen von yacc 5.4 Absteigende Analyse Übersetzergenerierung Syntaxanalyse und yacc (2) Jan Bredereke,
MehrDefinition von LR(k)-Grammatiken
Definition von LR(k)-Grammatiken Ziel: Ein Lookahead von k soll ausreichen um entscheiden zu können, welche Regel angewendet werden muss. Definition: FIRST k (w 1 w n ):= w 1 w k, falls n k, w 1 w n, sonst.
MehrÜBERPRÜFUNG VON TYPEN
5. Kapitel ÜBERPRÜFUNG VON TYPEN Compilerbau Prof. Dr. Wolfgang Schramm Typüberprüfung 1 Was ist wird überprüft? Ob Operatoren und Operanden verträglich (kompatibel) sind. Welche Programmelemente haben
MehrCompilerbau II Skript
Universität Siegen Fachbereich 12, Angewandte Informatik und Elektrotechnik Dozent: Dr. Kurt Sieber; Compilerbau II Skript Christian Uhrhan 18. März 2011 Inhaltsverzeichnis 1 Syntaxgerichtete Übersetzung
MehrKapitel 5: Syntax-Analyse
Kapitel 5: Syntax-Analyse Aufgabe Die Token-Folge wird strukturiert in Anweisungen, Ausdrücke etc., um die Semantische Analyse und Code-Erzeugung zu ermöglichen Themen Kontextfreie Grammatik Äquivalente
MehrZwischencodeerzeugung Compiler II
Zwishenodeerzeugung Compiler II Prof. Dr. Ursula Goltz 14.09.2012 Einleitung Front-End... Parser Sem. Analys Zwishenodegenerator Bak-End Codegenerator... Zwishendarstellung (Zwishenode) evtl. mashinennunabh.
MehrCompilerbau. Bachelor-Programm. im SoSe Prof. Dr. Joachim Fischer Dr. Klaus Ahrens Dr. Andreas Kunert Dipl.-Inf.
Bachelor-Programm Compilerbau im SoSe 2014 Prof. Dr. Joachim Fischer Dr. Klaus Ahrens Dr. Andreas Kunert Dipl.-Inf. Ingmar Eveslage fischer@informatik.hu-berlin.de J.Fischer 5.1 Position Teil I Die Programmiersprache
MehrShift Reduce Parser (Bottom up Parser) Historie Grundbegriffe Tabellengesteuerter LR(1) Parser Konstruktion der Elementmengen Tabellenkonstruktion
Shift Reduce Parser (Bottom up Parser) Historie Grundbegriffe Tabellengesteuerter LR(1) Parser Konstruktion der Elementmengen Tabellenkonstruktion Historie Die ersten Compiler entstanden in den 50ern.
MehrCompilerbau. Bachelor-Programm. im SoSe Prof. Dr. Joachim Fischer Dr. Klaus Ahrens Dipl.-Inf. Ingmar Eveslage.
Bachelor-Programm Compilerbau im SoSe 2014 Prof. Dr. Joachim Fischer Dr. Klaus Ahrens Dipl.-Inf. Ingmar Eveslage fischer@informatik.hu-berlin.de J.Fischer 8.1 Position Kapitel 1 Compilationsprozess Teil
MehrÜbungs- und Praktikumsaufgaben zur Systemprogrammierung Dipl.-Ing. H. Büchter (Lehrbeauftragter) FH-Dortmund WS 2001/2002 / SS 2002
1. Stellen Sie die schrittweise Verbesserung eines Compilers durch das Bootstrap- Verfahren mit Hilfe von T-Diagrammen dar. Gegeben ist ein auf der Maschine M lauffähiger Compiler C 1, der in S geschrieben
MehrStratego/XT und ASF+SDF Meta-Environment. Paul Weder Seminar Transformationen Datum:
Stratego/XT und ASF+SDF Meta-Environment Paul Weder Seminar Transformationen Datum: 20.01.2006 Gliederung Allgemeines ASF+SDF Meta-Environment Stratego/XT Zusammenfassung/Vergleich SDF (Syntax Definition
MehrImplementierung eines LR-Parser-Generators mit syntaktischen Prädikaten
Implementierung eines LR-Parser-Generators mit syntaktischen Prädikaten Aufgabenbeschreibung 29. Juli 2011 1 Einleitung und Motivation Der Parser-Generator Antlr [Par07] bietet die Möglichkeit, die Auswahl
MehrProgrammiersprachen und Übersetzer
Programmiersprachen und Übersetzer Sommersemester 2009 5. April 2009 Vorteile bei der Verwendung höherer Programmiersprachen Vorteile bei der Verwendung höherer Programmiersprachen 1. Einfache Notation
Mehr15. Rekursion. Rekursive Funktionen, Korrektheit, Terminierung, Aufrufstapel, Bau eines Taschenrechners, BNF, Parsen
453 15. Rekursion Rekursive Funktionen, Korrektheit, Terminierung, Aufrufstapel, Bau eines Taschenrechners, BNF, Parsen Mathematische Rekursion 454 Viele mathematische Funktionen sind sehr natürlich rekursiv
MehrTopologische Sortierung
Topologische Sortierung Input: gerichteter, kreisfreier Graph Output: Knotenliste, deren Ordnung mit der Richtung der Kanten übereinstimmt Algorithmus (Funktionsargumente unterstrichen): 8/1 Zyklenerkennung
Mehr3.4 Struktur von Programmen
3.4 Struktur von Programmen Programme sind hierarchisch aus Komponenten aufgebaut. Für jede Komponente geben wir Regeln an, wie sie aus anderen Komponenten zusammengesetzt sein können. program ::= decl*
MehrMethoden zur Interpretation LISPähnlicher. Programmiersprachen. Seminarvortrag / 53 FH AACHEN FACHBEREICH 9 TOBIAS STUMM MATR.-NR.
Methoden zur Interpretation LISPähnlicher Programmiersprachen Seminarvortrag 20.01.2017 FACHBEREICH 9 TOBIAS STUMM MATR.-NR. 4012917 1 Inhalt Motivation Lisp > Definition > Scheme Interpreter > Definition
MehrKontextfreie Sprachen. Automaten und Formale Sprachen alias Theoretische Informatik. Sommersemester Kontextfreie Sprachen
Automaten und Formale Sprachen alias Theoretische Informatik Sommersemester 2012 Dr. Sander Bruggink Übungsleitung: Jan Stückrath Wortproblem: der CYK-Algorithmus Pumping Lemma für kontextfreie Sprachen
Mehr9.4 Grundlagen des Compilerbaus
Kap09.fm Seite 717 Dienstag, 7. September 2010 2:06 14 9.4 Grundlagen des Compilerbaus 717 so dass die Benutzung dieser Regeln zum Aufbau eines + -Knotens bzw. eines Negations- Knotens im abstrakten Syntaxbaum
MehrSyntax von Programmiersprachen
Syntax von Programmiersprachen SEP 209 Programmiersprachen Sprache = Menge von Wörtern, typischerweise unendlich Programmiersprache: Wörter repräsentieren Programme Programm kann auf einem Computer evtl.
MehrGrundlagen der Programmierung 3 A
Grundlagen der Programmierung 3 A Compiler A: Phasen Lexikalische Analyse; Scanner Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2018 Compiler; Übersetzungsprogramme Ein Übersetzer (Compiler) ist ein
Mehr...imbeispiel: Die Konkatenation der Blätter des Ableitungsbaums t bezeichnen wir auch mit yield(t). liefert die Konkatenation: name int + int.
Die Konkatenation der Blätter des Ableitungsbaums t bezeichnen wir auch mit yield(t)....imbeispiel: E 0 E 1 + T 1 T 0 F 2 T 1 F 2 int F 1 int name liefert die Konkatenation: name int + int. 273 Die Grammatik
Mehr7. Syntax: Grammatiken, EBNF
7. Syntax: Grammatiken, EBNF Teil 1 Sehr schönes Beispiel für Notwendigkeit der Theoretischen Informatik für Belange der Praktischen Informatik Vertiefung in: Einführung in die Theoretische Informatik
MehrDieÜbersetzung funktionaler Programmiersprachen
DieÜbersetzung funktionaler Programmiersprachen 107 11 Die Sprache PuF Wir betrachten hier nur die Mini-Sprache PuF( Pure Functions ). Insbesondere verzichten wir(vorerst) auf: Seiteneffekte; Datenstrukturen;
MehrLR-Parser, Shift-Reduce-Verfahren
LR-Parser, Shift-Reduce-Verfahren Bottom-Up-Syntaxanalyse LR-Parser L: Eingabe von links nach rechts; R: Rechtsherleitung Shift-Reduce-Verfahren Beachte: Kein Backtracking nicht auf jede Grammatik anwendbar
MehrShift Reduce Parser (Bottom up Parser) Historie Grundbegriffe Tabellengesteuerter LR(1) Parser Konstruktion der Elementmengen Tabellenkonstruktion
Shift Reduce Parser (Bottom up Parser) Historie Grundbegriffe Tabellengesteuerter LR(1) Parser Konstruktion der Elementmengen Tabellenkonstruktion Historie Die ersten Compiler entstanden in den 50ern.
MehrCodegenerierung für Basisblöcke (1)
Codegenerierung für Basisblöcke (1) Basisblock (Grundblock): Teil des Kontrollflussgraphen, der keine Verzweigungen (Sprünge) oder Vereinigungen (Label) enthält keine Zyklen: bessere Optimierung möglich
Mehr3 Syntax von Programmiersprachen
3 Syntax von Programmiersprachen Syntax ( Lehre vom Satzbau ) formale Beschreibung des Aufbaus der Worte und Sätze, die zu einer Sprache gehören; im Falle einer Programmiersprache Festlegung, wie Programme
MehrDefinition von domänenspezifischen Sprachen mit Xtext: Einführung
Definition von domänenspezifischen Sprachen mit Xtext: Einführung 28. November 2012 Taentzer Modellgetriebene Softwareentwicklung 246 Überblick Was ist zu tun, wenn wir selbst einen Ansatz für modellgetriebenen
MehrInhalte der Vorlesung. Wiederholung. Die Phasen der Übersetzung. 1. Einführung
Inhalte der Vorlesung Wiederholung 1.Einführung 2.Lexikalische Analyse 3.Der Textstrom-Editor sed 4.Der Scanner-Generator lex 5.Syntaxanalyse und der Parser-Generator yacc 6.Syntaxgesteuerte Übersetzung
MehrSemantik von Programmiersprachen SS 2017
Lehrstuhl für Programmierparadigmen Denis Lohner Sebastian Ullrich denis.lohner@kit.edu sebastian.ullrich@kit.edu Semantik von Programmiersprachen SS 2017 http://pp.ipd.kit.edu/lehre/ss2017/semantik Lösungen
MehrFachseminar Compilerbau
Fachseminar Compilerbau WS 08/09 Matthias Schiller Syntaktische Analyse 1. Prinzip der Top-Down-Analyse 2. LL(1)-Grammatiken Modell-Vorstellung Der Scanner liefert als Ergebnis der lexikalischen Analyse,
MehrKapitel 12: Induktive
Kapitel 12: Induktive Datenstrukturen Felix Freiling Lehrstuhl für Praktische Informatik 1 Universität Mannheim Vorlesung Praktische Informatik I im Herbstsemester 2009 Folien nach einer Vorlage von H.-Peter
MehrStruktur des MicroJava-Compilers
Struktur des MicroJava-Compilers Compiler Parser.mj Scanner Code- Generator.obj Symboltabelle UE zu Übersetzerbau Lexikalische Analyse 1 Grammatik ohne Scanner Expr = Term { "+" Term }. Term = Factor {
MehrTheoretische Grundlagen der Informatik
Theoretische Grundlagen der Informatik Vorlesung am 15.01.2015 INSTITUT FÜR THEORETISCHE 0 KIT 15.01.2015 Universität des Dorothea Landes Baden-Württemberg Wagner - Theoretische und Grundlagen der Informatik
MehrInhalt Kapitel 11: Formale Syntax und Semantik
Inhalt Kapitel 11: Formale Syntax und Semantik 1 Abstrakte und konkrete Syntax 2 Lexikalische Analyse 3 Formale Sprachen, Grammatiken, BNF 4 Syntaxanalyse konkret 266 Abstrakte und konkrete Syntax Abstrakte
MehrEinführung - Parser. Was ist ein Parser?
Gliederung 1. Einleitung 1.1 Was ist ein Parser? 1.2 Was ist ein tabellengesteuerter TD-Parser? 1. Tabellengesteuerter TD-Parser 2.1 Funktionsweise 2.2 Darstellung als Pseudocode 2.3 Konstruktion von prädiktiven
Mehr4.4 Imperative Algorithmen Prozeduren
4.4.2 Prozeduren Der Wert eines Ausdrucks u in Zustand z Z lässt sich damit auch leicht definieren (jetzt W Z statt W σ ) Dazu erweitern wir die rekursive Definition von Folie 57 (Wert eines Ausdrucks):
MehrTheoretische Grundlagen der Informatik. Vorlesung am 8. Januar INSTITUT FÜR THEORETISCHE INFORMATIK
Theoretische Grundlagen der Informatik 0 08.01.2019 Torsten Ueckerdt - Theoretische Grundlagen der Informatik KIT Die Forschungsuniversität in der Helmholtz-Gemeinschaft www.kit.edu Letzte Vorlesung Eine
MehrOffenbar hängt das Ergebnis nur von der Summe der beiden Argumente ab...
0 1 2 0 2 1 1 2 0 2 1 0 Offenbar hängt das Ergebnis nur von der Summe der beiden Argumente ab... 0 1 2 0 1 2 1 1 3 2 2 3 212 Um solche Tabellen leicht implementieren zu können, stellt Java das switch-statement
Mehr3 Syntax von Programmiersprachen
3 Syntax von Programmiersprachen Syntax ( Lehre vom Satzbau ) formale Beschreibung des Aufbaus der Worte und Sätze, die zu einer Sprache gehören; im Falle einer Programmiersprache Festlegung, wie Programme
Mehr> Parallele Systeme Übung: 4. Übungsblatt Philipp Kegel Wintersemester 2012/2013. Parallele und Verteilte Systeme, Institut für Informatik
> Parallele Systeme Übung: 4. Übungsblatt Philipp Kegel Wintersemester 2012/2013 Parallele und Verteilte Systeme, Institut für Informatik Inhaltsverzeichnis 2 1 Besprechung des 4. Übungsblattes Aufgabe
Mehr9 Compilerbau-Werkzeuge
9.1 Überblick In der Praxis des Compilerbaus werden heute vielfach Werkzeuge eingesetzt, die Routineaufgaben erleichtern sollen. In erster Linie ist dabei an die Punkte Generierung eines Scanners Generierung
MehrStackmaschine; Speicheradressierung
Stackmaschine; Speicheradressierung Erweiterung um globalen Speicher (Heap, Halde) pro Speicherplatz eine Zahl. Notation ist als Array SP [0..]. Zugriff mittels Adresse (Index): eine Zahl i.a.: Zahlen
MehrCompilerbau 12. Übungsblatt, Sommersemester 2015 Abgabetermin:
12 12. Übungsblatt, Sommersemester 2015 Abgabetermin: 14.07.2015 Aufgabe 32 Übersetzen Sie den arithmetischen Ausdruck a*-(b+c) in 3-Adress-Code. Aufgabe 33 Entwickeln Sie für die folgende Teilgrammatik
MehrCompilerbau. Bachelor-Programm. im SoSe Prof. Dr. Joachim Fischer Dr. Klaus Ahrens Dr. Andreas Kunert Dipl.-Inf.
Bachelor-Programm Compilerbau im SoSe 2014 Prof. Dr. Joachim Fischer Dr. Klaus Ahrens Dr. Andreas Kunert Dipl.-Inf. Ingmar Eveslage fischer@informatik.hu-berlin.de J.Fischer 1.1 Was ist ein Compiler? Ein
Mehr3.1 Reservierte Wörter
3.1 Reservierte Wörter int Bezeichner für Basis-Typen; if, else, while Schlüsselwörter aus Programm-Konstrukten; (,), ",, {,},,,; Sonderzeichen. 62 3.2 Was ist ein erlaubter Name? Schritt 1: Angabe der
MehrDas Kontrollfluss-Diagramm für Ò ¼ µ:
Das Kontrollfluss-Diagramm für Ò ¼ µ: find0(a,x,n1,n2) t = (n1+n2)/2; no a[t]==x yes no n1==n2 yes return t; no x > a[t] yes return 1; no n1 < t yes return find0(a,x,t+1,n2); return 1; return find0(a,x,n1,t
Mehr4. Lernen von Entscheidungsbäumen
4. Lernen von Entscheidungsbäumen Entscheidungsbäume 4. Lernen von Entscheidungsbäumen Gegeben sei eine Menge von Objekten, die durch Attribut/Wert- Paare beschrieben sind. Jedes Objekt kann einer Klasse
Mehr5 BINÄRE ENTSCHEIDUNGS- DIAGRAMME (BDDS)
5 BINÄRE ENTSCHEIDUNGS- DIAGRAMME (BDDS) Sommersemester 2009 Dr. Carsten Sinz, Universität Karlsruhe Datenstruktur BDD 2 1986 von R. Bryant vorgeschlagen zur Darstellung von aussagenlogischen Formeln (genauer:
MehrWerkzeuge zur Programmentwicklung
Werkzeuge zur Programmentwicklung B-15 Bibliothek Modulschnittstellen vorübersetzte Module Eingabe Editor Übersetzer (Compiler) Binder (Linker) Rechner mit Systemsoftware Quellmodul (Source) Zielmodul
Mehr6 Kontextfreie Grammatiken
6 Kontextfreie Grammatiken Reguläre Grammatiken und damit auch reguläre Ausdrücke bzw. endliche Automaten haben bezüglich ihres Sprachumfangs Grenzen. Diese Grenzen resultieren aus den inschränkungen,
Mehr5. Die syntaktische Analyse
mittels sog. Parser Input: Folge von Token (Symbolen), geliefert vom Scanner/Sieber Aufgabe: Teilfolgen zusammenfassen zu größeren syntaktischen Einheiten Ausdrücke, Anweisungen(-folgen), Deklarationen,
Mehr1 Der Baum. Informatik I: Einführung in die Programmierung 11. Bäume. Bäume in der Informatik. Bäume in der Informatik - Definition.
1 Informatik I: Einführung in die Programmierung 11. Bäume e e Albert-Ludwigs-Universität Freiburg Bernhard Nebel 13. November 2015 13. November 2015 B. Nebel Info I 3 / 33 Bäume in der Informatik Bäume
MehrGrundlagen der Programmierung 3 A
Grundlagen der Programmierung 3 A Compiler A: Phasen; Scanner Prof. Dr. Manfred Schmidt-Schauß Sommersemester 2017 Compiler; Übersetzungsprogramme Ein Übersetzer (Compiler) ist ein Programm, das ein Wort
MehrKlassen und Objekte. Klassen sind Vorlagen für Objekte. Objekte haben. Attribute. Konstruktoren. Methoden. Merkblatt
Klassen und Objekte Klassen sind Vorlagen für Objekte. Objekte haben Attribute Konstruktoren Methoden Aus einer Klasse kann man beliebig viele Objekte herstellen. Attribute bestimmen die Eigenschaften
MehrGrundlagen der Programmierung 2 (Comp-A)
Grundlagen der Programmierung 2 (Comp-A) Prof. Dr. Manfred Schmidt-Schauß Künstliche Intelligenz und Softwaretechnologie 16. Juni 2011 Compiler; Übersetzungsprogramme Ein Übersetzer (Compiler) ist ein
Mehr{P} S {Q} {P} S {Q} {P} S {Q} Inhalt. Hoare-Kalkül. Hoare-Kalkül. Hoare-Tripel. Hoare-Tripel. Hoare-Tripel
Inhalt Hoare-Kalkül Formale Verifizierung Hoare-Kalkül while-sprache Terminierung Partielle / totale Korrektheit 4.0 Hoare-Kalkül entwickelt von C.A.R. (Tony) Hoare (britischer Informatiker), 1969 formales
Mehr1 Grammar Engineering. 2 Abstrakte Syntax als abstrakte Algebra. 3 LL(1)-Parser. 4 LR Parser. 5 Fehlerbehandlung. 6 Earley Parser
1 Grammar Engineering 2 Abstrakte Syntax als abstrakte Algebra 3 LL(1)-Parser 4 LR Parser 5 Fehlerbehandlung 6 Earley Parser Zusatzfolien Syntaktische Analyse Wintersemester 2008/09 1 / 44 Grammar Engineering
MehrGrundlagen der Programmierung 2 (Comp-A)
Grundlagen der Programmierung 2 (Comp-A) Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 23. Mai 2007 Compiler; Übersetzungprogramme Ein Übersetzer (Compiler) ist ein Programm,
MehrKapitel 4: Datentyp Keller und Schlange
Kapitel 4: Datentyp Keller und Schlange Keller (Stack) Schlange (Queue) 4-1 Definition Keller und seine Operationen Ein Keller (engl. Stack; Stapel) ist eine endliche Menge von Elementen mit einer LIFO-Organisation
MehrÄquivalente Grammatiken / attributierte Grammatik
Äquivalente Grammatiken / attributierte Grammatik Linksfaktorisierung Elimination von Linksrekursion Umwandlung von EBNF in BNF Attributierte Grammatik Semantikfunktionen und Übersetzungsschema Synthetisierte,
MehrTheoretische Grundlagen der Informatik
Theoretische Grundlagen der Informatik Vorlesung am 13.01.2011 INSTITUT FÜR THEORETISCHE INFORMATIK 0 KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft
MehrAutomatisches Verstehen gesprochener Sprache
Automatisches Verstehen gesprochener Sprache 6. Syntaxanalyse Martin Hacker Bernd Ludwig Günther Görz Professur für Künstliche Intelligenz Department Informatik Friedrich-Alexander-Universität Erlangen-Nürnberg
MehrVon der Grammatik zum AST
Von der Grammatik zum AST Welche Eigenschaften soll ein Parser haben? Wann ist eine Grammatik eindeutig? Wie sollte eine Grammatik aussehen? Theoretischer Hin tergrund: FIRST, FOLLOW Einschränkungen von
MehrDeterministische PDAs
Deterministische PDAs Erinnerung: Ein PDA ist deterministisch, wenn q Q, a Σ, Z Γ: δ(q,a,z) + δ(q,ε,z) 1. Definition: Eine Sprache heißt deterministisch kontextfrei, wenn es für sie einen DPDA gibt. Ziel:
MehrKonstruieren der SLR Parsing Tabelle
Konstruieren der SLR Parsing Tabelle Kontextfreie Grammatik (CFG) Notation 1. Diese Symbole sind Terminals: (a) Kleinbuchstaben vom Anfang des Alphabets wie a, b, c. (b) Operator Symbole wie +,, usw. (c)
MehrÜbersetzerbau Cluj-Napoca, Rumänien 2007
Übersetzerbau Cluj-Napoca, Rumänien 2007 Markus Löberbauer Institut für Systemsoftware Johannes Kepler Universität, 4040 Linz, Österreich Loeberbauer@ssw.jku.at 2007-02-01 Zusammenfassung In dieser Übung
Mehr1 pulsierender Speicher
1 pulsierender Speicher 1.1 Aufgabentyp Gegeben sei das folgende C-Programm: [...] (a) Geben Sie den Gültigkeitsbereich jedes Objektes des Programms an. (b) Stellen Sie die Rechnung des Programms für die
MehrPhasen eines Compilers. Grundlagen der Programmierung 2. Programm für heute. LR-Parser, Shift-Reduce-Verfahren. Schiebe-Reduziere-Parser
Phasen eines Compilers Grundlagen der Programmierung 2 Schiebe-Reduziere-Parser Prof Dr. Manfred Schmidt-Schauß (unter Mithilfe von PD Dr. David Sabel) Quelltext (String) Syntaxbaum Lexikalische Analyse
MehrUniversität München, Hans-Peter Kriegel und Thomas Seidl Informatik II a[0] a[1] a[2] a[3] a[n 1]
Universität München, Hans-Peter Kriegel und Thomas Seidl Informatik II -108 Kapitel 5: Arrays Einführung Ein Array ist eine Reihung gleichartiger Objekte. a: a[0] a[1] a[2] a[3] a[n 1] Bezeichner a steht
MehrAlgorithmen & Programmierung. Ausdrücke & Operatoren (1)
Algorithmen & Programmierung Ausdrücke & Operatoren (1) Ausdrücke Was ist ein Ausdruck? Literal Variable Funktionsaufruf Ausdruck, der durch Anwendung eines einstelligen (unären) Operators auf einen Ausdruck
MehrPraktikum Softwareanalyse und -transformation
Praktikum Softwareanalyse und -transformation Thilo Mende Universität Bremen Fachbereich 3 Mathematik und Informatik Arbeitsgruppe Softwaretechnik http://www.informatik.uni-bremen/st Sommersemester 2009
MehrEin Fragment von Pascal
Ein Fragment von Pascal Wir beschreiben einen (allerdings sehr kleinen) Ausschnitt von Pascal durch eine kontextfreie Grammatik. Wir benutzen das Alphabet Σ = {a,..., z, ;, :=, begin, end, while, do} und
MehrTheoretische Informatik I
Theoretische nformatik inheit 3 Kontextfreie Sprachen 1. Kontextfreie Grammatiken 2. Pushdown Automaten 3. igenschaften kontextfreier Sprachen Verarbeitung von Programmiersprachen Was ist das einfachste
MehrLexikalische Programmanalyse der Scanner
Der Scanner führt die lexikalische Analyse des Programms durch Er sammelt (scanned) Zeichen für Zeichen und baut logisch zusammengehörige Zeichenketten (Tokens) aus diesen Zeichen Zur formalen Beschreibung
Mehr1.1 Abstrakte Datentypen 1.2 Lineare Strukturen 1.3 Bäume 1.4 Prioritätsschlangen 1.5 Graphen
1 Datenstrukturen 1.1 Abstrakte Datentypen 1.2 Lineare Strukturen 1.3 Bäume 1.4 Prioritätsschlangen 1.5 Graphen 1 1.3 Bäume Hierarchische Datenstruktur Zusammenfassung von Gruppen (z.b. Bund / Länder /
Mehr30. Parser-Generatoren
30. Parser-Generatoren Prof. Dr. rer. nat. Uwe Aßmann Institut für Software- und Multimediatechnik Lehrstuhl Softwaretechnologie Fakultät für Informatik TU Dresden http://st.inf.tu-dresden.de Version 11-0.1,
MehrInstitut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke
Java 2 Markus Reschke 07.10.2014 Datentypen Was wird gespeichert? Wie wird es gespeichert? Was kann man mit Werten eines Datentyps machen (Operationen, Methoden)? Welche Werte gehören zum Datentyp? Wie
Mehr