• Keine Ergebnisse gefunden

Praktikum Compilerbau Sitzung 4 – Abstrakter Syntaxbaum

N/A
N/A
Protected

Academic year: 2022

Aktie "Praktikum Compilerbau Sitzung 4 – Abstrakter Syntaxbaum"

Copied!
16
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Praktikum Compilerbau

Sitzung 4 – Abstrakter Syntaxbaum

Prof. Dr.-Ing. Gregor Snelting

Matthias Braun und Sebastian Buchwald

IPD Snelting, Lehrstuhl für Programmierparadigmen

(2)

1. Letzte Woche

2. Planung

3. Tipps & Tricks

4. Sonstiges

(3)

Letzte Woche

Was waren eure Erfahrungen?

(4)

Compilerphasen

Lexer Parser Semantik

Zwischencodeerzeugung Optimierung Codeerzeugung

Tokens

AST

attributierter AST

Zwischencode

Zwischencode

(5)

Aufgaben für diese Woche

Entwurf des AST als abstrakte Algebra.

Implementierung als reale Datenstrukturen.

Anknüpfen der AST-Erzeugung an den Parser.

(6)

Was gehört in den AST?

Semantisch unwichtige Dinge können weggelassen werden public class Bla { }

Program

Class(Bla)

(7)

Was gehört in den AST?

Code ist Kompositional AST stellt Hierarchie dar

public class Foo {

public int bar() { return 2 + 2; } }

Program

Class(foo)

Method(int,bar)

Compound

Return

+

Const(2) Const(2)

(8)

Was gehört nicht in den AST?

Wörter die Konstrukte voneinander trennen if ( foo ) { a1(); a2(); } a3();

Compound if

Reference(foo) Compound

. . . a1 . . . . . . a2 . . .

. . . a3 . . .

(9)

Was gehört nicht in den AST?

Wörter die Mehrdeutigkeiten in der Hierarchie verhindern a∗(b+c)

Keine Klammern:

*

Reference(a) +

Reference(b) Reference(c)

(10)

Syntax als abstrakte Algebra

Beispiel: abstrakte Syntax für Expressions und Statements

Stmt = IfStmt | IfElseStmt | WhileStmt | Assignment | Block . . . IfStmt :: Expr Stmt

IfElseStmt :: Expr Stmt Stmt WhileStmt :: Expr Stmt

Block :: Decls StmtList StmtList :: Stmt + Assignment :: Var Expr

Var :: Symbol

Expr = Addop | MultOp | Var | . . . Addop :: Expr Expr

Multop :: Expr Expr

siehe Vorlesung Sprachtechnologie und Compiler

(11)

Tipps

Nicht jede Produktion der Grammatik muss ein eigener AST-Knoten werden!

Gemeinsame Basisklassen sinnvoll wo Alternativen in der Grammatik vorhanden sind.

Statements Expressions Types?

ClassMember?

(12)

Weitere Fragen

Braucht man Verweise auf das Quellprogramm?

Warum (nicht)?

Was sollte ein Attribut werden, was ein eigener Knoten im AST?

Wie ist das bei Typen oder Bezeichnern?

(13)

Beispiel: Taschenrechner mit Attributierter Grammatik

Produktion Semantische Regeln 1) L → E L . val = E . val

2) E → E 1 + T E . val = E 1 . val + T . val 3) E → T E . val = T . val

4) T → T 1 * F T . val = T 1 . valF . val 5) T → F T . val = F . val

6) F → ( E ) F . val = E . val

7) F → digit F . val = digit . lexval

(14)

Attributierter Parsebaum für 3 * 5 + 4

L . val = 19 E . val = 19 E . val = 15

T . val = 15 T . val = 3

F . val = 3 digit .

* F . val = 5 digit . lexval = 5

+ T . val = 4

F . val = 4

digit . lexval = 4

(15)

Implementierung Attributierter Grammatiken

ererbte Attribute werden zu Parameter

synthetisierte Attribute werden zu Rückgabewerten

(16)

Feedback! Fragen? Probleme?

Wie läuft die Arbeitseinteilung?

Anmerkungen?

Probleme?

Fragen?

Referenzen

ÄHNLICHE DOKUMENTE

Ergebnisse werden nach der Präsentation bekannt gegeben Gewinner erhalten Ruhm und

Vereinfachung des Automaten möglich wenn man Schlüsselwörter in Stringtabelle einträgt und Regeln für IDENTIFIER benutzt. Starke Reduktion

Operatoren lassen sich dynamisch anlegen (z.B. für

Nicht jede Produktion der Grammatik muss ein eigener AST-Knoten werden. Gemeinsame Basisklassen sinnvoll wo Alternativen in der Grammatik

Lese-Tipp: „Generierung lokaler Optimierungen“ Diplomarbeit von Thomas

Korrektheit: Optimierungen sollen Semantik erhalten Effizienz: Optimierung muss auch große Programme in angemessener Zeit verarbeiten können... Optimierungen

Knoten auf Offsets im Activation Record zuweisen Phase 2 – Assembler

Immer von allgemein nach spezifisch (nicht springen oder low level Einstieg)?. Nicht in