Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

Compiler/fortolker struktur Mellem- kode Mellemk.- optimering Kode- generering Kode- optimering Lexikalsk- analyse Syntax- analyse Semantik- analyse -

Lignende præsentationer


Præsentationer af emnet: "Compiler/fortolker struktur Mellem- kode Mellemk.- optimering Kode- generering Kode- optimering Lexikalsk- analyse Syntax- analyse Semantik- analyse -"— Præsentationens transcript:

1 Compiler/fortolker struktur Mellem- kode Mellemk.- optimering Kode- generering Kode- optimering Lexikalsk- analyse Syntax- analyse Semantik- analyse - - - - - - - Front end - - - - - - - - - - - - - - - - Back end - - - - - - - - -

2 Mellemkode. Tree-based repræsentation. Mellemkode som et parsertræ. Three-address koder: A:= b + c int main () { int a=0,b=2; while (b) { a= a+b; b--; } a= 0 b= 2 l1: ifz b goto l2 a= a + b b= b – 1 goto l1 l2:

3 Three-address kodeoptimering. 1.Find basic blokke. 2.Optimer hver basic blok: –Commom sub-expression –Copy propagation –Dead-code elimination –Arithmetic transform Constant folding Algebraic transform Reduction in strength –Packing af mellemvariable. 3.Loop optimering.

4 Basic blokke a= 0 b= 2 l1: ifz b goto l2 a= a + b b= b – 1 goto l1 l2: Blok start: Første statement Label, der hoppes til Statement efter et branch

5 Basic blok optimering. –Commom sub-expression Samme beregning flere gange. –Copy propagation Samme værdi i flere variable. Erstat alle med en. –Dead-code elimination Variable, der ikke bruges, slettes. –Arithmetic transform Constant folding Beregn konstanter Algebraic transform + 0, - 0, * 1 og /1 Reduction in strength Fx: 2*x -> x+x –Packing af mellemvariable Frigiv overflødig plads til mellemvariable.

6 Commom sub-expression b := 4 - 2 t1 := b / 2 t2 := a * t1 t3 := t2 * b t4 := t3 + c t5 := t2 * b t6 := t5 + c d := t4 * t6 b := 4 - 2 t1 := b / 2 t2 := a * t1 t3 := t2 * b t4 := t3 + c t5 := t3 t6 := t5 + c d := t4 * t6

7 Copy propagation b := 4 - 2 t1 := b / 2 t2 := a * t1 t3 := t2 * b t4 := t3 + c t5 := t3 t6 := t5 + c d := t4 * t6 b := 4 - 2 t1 := b / 2 t2 := a * t1 t3 := t2 * b t4 := t3 + c t5 := t3 t6 := t3 + c d := t4 * t6 b := 4 - 2 t1 := b / 2 t2 := a * t1 t3 := t2 * b t4 := t3 + c t5 := t3 t6 := t4 d := t4 * t4

8 Dead-code elimination b := 4 - 2 t1 := b / 2 t2 := a * t1 t3 := t2 * b t4 := t3 + c t5 := t3 t6 := t4 d := t4 * t4 b := 4 - 2 t1 := b / 2 t2 := a * t1 t3 := t2 * b t4 := t3 + c d := t4 * t4

9 Arithmetic transform b := 4 - 2 t1 := b / 2 t2 := a * t1 t3 := t2 * b t4 := t3 + c d := t4 * t4 b := 2 t1 := b / 2 t2 := a * t1 t3 := t2 * b t4 := t3 + c d := t4 * t4 t1 := 1 t2 := a * t1 t3 := t2 * 2 t4 := t3 + c d := t4 * t4 t2 := a t3 := t2 * 2 t4 := t3 + c d := t4 * t4

10 Loop optimering. 1 2 34 5 6 1 2b 34 5 6 2a

11 Kodegenerering. a= 0 b= 2 l1: ifz b goto l2 a= a + b b= b – 1 goto l1 l2: Globale og static variable: Når navn indsættes i symboltabellen så SymAdr= Nextstatic; Nextstatic=+ VarSize; Lokal variable: Hvis første: NextLokal= 0; Ellers: SymAdr= NextLokal; NextLokal=+ VarSize; For hver linie i mellemkode: Generer koden vha informationer fra symboltabellen. Labels: Anvendelse: Kik i symboltabellen om den er defineret ellers gem i tabellen, hvor den bruges. Oprettelse: Labeladr= LC. Hvis gemte anvendelser, så sæt referencer til LabelAdr.


Download ppt "Compiler/fortolker struktur Mellem- kode Mellemk.- optimering Kode- generering Kode- optimering Lexikalsk- analyse Syntax- analyse Semantik- analyse -"

Lignende præsentationer


Annoncer fra Google