• 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!
20
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Praktikum Compilerbau

Sitzung 4 – Abstrakter Syntaxbaum

Prof. Dr.-Ing. Gregor Snelting Andreas Zwinkau

IPD Snelting, Lehrstuhl für Programmierparadigmen

(2)

Letzte Woche

Was waren eure Erfahrungen?

(3)

Compilerphasen

Lexer Parser Semantik

Zwischencodeerzeugung Optimierung Codeerzeugung

Tokens

AST

attributierter AST

Zwischencode

Zwischencode

(4)

Aufgaben für diese Woche

Entwurf des AST als abstrakte Algebra.

Implementierung als reale Datenstrukturen.

Anknüpfen der AST-Erzeugung an den Parser.

(5)

Was gehört in den AST?

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

Program

Class(Bla)

(6)

Was gehört in den AST?

Code ist kompositional AST stellt Hierarchie dar

class Foo {

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

Program

Class(foo)

Method(int,bar)

Compound

Return

+

Const(2) Const(2)

(7)

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 . . .

(8)

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)

(9)

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

(10)

Implementierung abstrakte Syntax

Objektorientiert:

je 1 Klasse pro syntaktische Kategorie Alternativregeln

X = X1 | X2 | . . . werden zu Unterklassen:

class X { /∗ ... ∗/ }

class X1 extends X { /∗ ... ∗/ } class X2 extends X { /∗ ... ∗/ } Baumaufbauregeln

X :: Y1 Y2 werden zu Konstruktorfunktionen:

class X {

public X(Y1 y1, Y2 y2) { /∗ ... ∗/ }

}

(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 . lexval = 3

* 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)

AST-Aufbau für

LL( 1 ) -Beispielgrammatik

Produktion Semantische Regeln 1) E → T E 0 E . node = E 0 . node

E 0 . in = T . node 2) E 0 → ε E 0 . node = E 0 . in

3) E 1 0 → + T E 2 0 E 2 0 . in = new Node(+ , E 1 0 . in , T . node ) E 1 0 . node = E 2 0 . node

4) T → F T 0 T . node = T 0 . node T 0 . in = F . node 5) T 0 → ε T 0 . node = T 0 . in

6) T 1 0 → * F T 2 0 T 2 0 . in = new Node(* , T 1 0 . in , F . node ) T 1 0 . node = T 2 0 . node

7) F → id F . node = new Leaf( id , id . entry )

8) F → ( E ) F . node = E . node

(17)

AST für a ∗ bc

E node

T node

F node

id

T0 in node

F

node

id

T0 in node

F

node

id T0

in node

ε E0 in node

ε

*

*

id id

id

Definition vona Definition vonb

Definition vonc

(18)

AST für a ∗ bc

E node

T node

F node

id

T0 in node

F

node

id

T0 in node

F

node

id T0

in node

ε E0 in node

ε

*

*

id id

id

Definition vona Definition vonb

Definition vonc

(19)

AST für a ∗ bc

E node

T node

F node

id

T0 in node

F

node

id

T0 in node

F

node

id T0

in node

ε E0 in node

ε

*

*

id id

id

Definition vona Definition vonb

Definition vonc

(20)

Feedback! Fragen? Probleme?

Wie läuft die Arbeitseinteilung?

Anmerkungen?

Probleme?

Fragen?

Referenzen

ÄHNLICHE DOKUMENTE

static expression_t ∗parse_subexpression(precedence_t precedence) { expression_parser_function_t ∗parser = &expression_parsers[token.type];. /∗ parse prefix expression or

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

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