Analýza toku dát Ján Šturc Zima 2010 Kompilátory

Podobné dokumenty
Algoritmizácia a programovanie - Príkazy

Microsoft Word - Transparencies03.doc

Relačné a logické bázy dát

Klasická metóda CPM

Matematika 2 - cast: Funkcia viac premenných

Matematický model činnosti sekvenčného obvodu 7 MATEMATICKÝ MODEL ČINNOSTI SEKVENČNÉHO OBVODU Konečný automat predstavuje matematický model sekvenčnéh

Microsoft Word - Algoritmy a informatika-priesvitky02.doc

Úroveň strojového kódu procesor Intel Pentium Pamäťový operand Adresovanie pamäte Priama nepriama a indexovaná adresa Práca s jednorozmerným poľom Pra

NÁVRH UČEBNÝCH OSNOV PRE 1

Tue Oct 3 22:05:51 CEST Začiatky s jazykom C 2.1 Štruktúra programu Štruktúra programu by sa dala jednoducho popísať nasledovnými časťami, kto

Informačné technológie

enum

Axióma výberu

Microsoft PowerPoint - Prog_p08.ppt

Kolmogorovská zložitost

Teória pravdepodobnosti Zákony velkých císel

Microsoft Word - skripta3b.doc

ECDL Syllabus V50 SK-V01

8 Cvičenie 1.1 Dokážte, že pre ľubovoľné body X, Y, Z platí X + Y Z = Z + Y X. 1.2 Dokážte, že pre ľubovoľné body A, B, D, E, F, G afinného priestoru

Snímka 1

Pokrocilé programovanie XI - Diagonalizácia matíc

Inteligentné rozhodovacie systémy Heuristické prehľadávanie SP Október, 2018 Katedra kybernetiky

2.5. Dotyčnica krivky, dotykový kužeľ. Nech f je krivka a nech P V (f) (t.j. m P (f) 1). Ak m P (f) = r a l je taká priamka, že I P (f, l) > r, potom

Snímka 1

Vzorové riešenia úlohy 4.1 Bodovanie Úvod do TI 2010 Dôvod prečo veľa z Vás malo málo bodov bolo to, že ste sa nepokúsili svoje tvrdenia dokázať, prič

1

Paralelné algoritmy, cast c. 3

Úroveň strojového kódu procesor Intel Pentium Úvod Štruktúra procesorov Intel Pentium Základné inštrukcie Vetvenia a cykly Praktické programovanie jed

gis5 prifuk

Microsoft Word - 6 Výrazy a vzorce.doc

Microsoft Word - Argumentation_presentation.doc

12Prednaska

Paralelné algoritmy, cast c. 3

03_ControlFlow.dvi

Paralelné algoritmy, cast c. 2

7/1/2015 Úvod do databáz, skúškový test, max 25 bodov, 90 min

Priebeh funkcie

Informačná a modelová podpora pre kvantifikáciu prvkov daňovej sústavy SR

PowerPoint Presentation

III. Diferenciálny počet funkcie viac premenných (Prezentácia k prednáškam, čast B) Matematická analýza IV (ÚMV/MAN2d/10) RNDr. Lenka Halčinová, PhD.

DediĊnosť

Podpora metód operačného výskumu pri navrhovaní systému liniek doc. RNDr. Štefan PEŠKO, CSc. Katedra matematických metód, Fa

Microsoft Word - Zaver.pisomka_januar2010.doc

Prenosový kanál a jeho kapacita

História

Neineárne programovanie zimný semester 2018/19 M. Trnovská, KAMŠ, FMFI UK 1

Analýza sociálnych sietí Geografická lokalizácia krajín EU

Numerické riešenie všeobecnej (klasickej) DMPK rovnice.

Microsoft PowerPoint - OOP_prednaska_10.pptx

MO_pred1

Súkromné gymnázium, Česká 10, Bratislava INFORMATIKA

Poznámky k cvičeniu č. 2

Úvod do lineárnej algebry Monika Molnárová Prednášky 2006

Metrické konštrukcie elipsy Soňa Kudličková, Alžbeta Mackovová Elipsu, ako regulárnu kužeľosečku, môžeme študovať synteticky (konštrukcie bodov elipsy

1. KOMPLEXNÉ ČÍSLA 1. Nájdite výsledok operácie v tvare x+yi, kde x, y R. a i (5 2i)(4 i) b. i(1 + i)(1 i)(1 + 2i)(1 2i) (1 7i) c. (2+3i) a+bi d

Operačná analýza 2

Identity Lifecycle Management

Katalóg cieľových požiadaviek k maturitnej skúške

Cvičenie 9 Riešené príklady 1. Príklad min f(x 1, x 2 ) = x x x 1 s.t. x 1 80 x 1 + x Pre riešenie úlohy vykonáme nasledujúce kroky

SK MATEMATICKÁOLYMPIÁDA skmo.sk 2009/ ročník MO Riešenia úloh česko-poľsko-slovenského stretnutia 1. Určte všetky trojice (a, b, c) kladných r

Microsoft Word - FRI”U M 2005 forma B k¾úè.doc

Microsoft Word - Diskusia11.doc

Funkcie viac premenných

midterm2014_1

Informačná a modelová podpora pre kvantifikáciu prvkov daňovej sústavy SR

Microsoft Word - mnohouholnik.doc

Algoritmizácia a programovanie - Štruktúrované údajové typy

Microsoft Word - Priloha_1.docx

Úvodná prednáška z RaL

Intervalový solver nelineárních podmínek

Microsoft Word - Final_test_2008.doc

NSK Karta PDF

1

Siete vytvorené z korelácií casových radov

STRUČNÝ NÁVOD KU IP-COACHU

SRPkapitola06_v1.docx

1 Rekurencie este raz riesenia niektorych rekurencii z cvik. mame danu rekurenciu napr T (n) = at ( n b ) + k. idea postupu je postupne rozpisovat cle

A 1

O možnosti riešenia deformácie zemského povrchu z pohladu metódy konecných prvkov konference pro studenty matematiky

Pokrocilé spracovanie obrazu - Fourierová transformácia

Pokrocilé programovanie II - Nelineárne iteracné schémy, chaos, fraktály

Microsoft Word - 16.kapitola.doc

NSK Karta PDF

Slide 1

1 Portál pre odborné publikovanie ISSN Heuristický adaptívny PSD regulátor založený na miere kmitavosti Šlezárová Alexandra Elektrotechnika

Preco kocka stací? - o tom, ako sú rozdelené vlastné hodnoty laplasiánu v limite, ked sú velké

Jednotkový koreň (unit root), diferencovanie časového radu, unit root testy Beáta Stehlíková Časové rady, FMFI UK, 2011/2012 Jednotkový koreň(unit roo

Republika Srbsko MINISTERSTVO OSVETY, VEDY A TECHNOLOGICKÉHO ROZVOJA ÚSTAV PRE HODNOTENIE KVALITY VZDELÁVANIA A VÝCHOVY VOJVODINSKÝ PEDAGOGICKÝ ÚSTAV

PowerPoint Presentation

Tomáš Jelínek - včely vyhľadávanie

9.1 MOMENTY ZOTRVACNOSTI \(KVADRATICKÉ MOMENTY\) A DEVIACNÝ MOMENT PRIEREZU

Snímka 1

UNIVERZITA KOMENSKÉHO V BRATISLAVE FAKULTA MATEMATIKY, FYZIKY A INFORMATIKY Katedra informatiky PLATNOSŤ BERGE-FULKERSONOVEJ HYPOTÉZY PRE ŠPECIÁLNE TR

Hardwarové prerušenie Nasledujúci kód ukazuje inštaláciu obsluhy časovača vrátane jeho inicializácie // inicializace časovače, přerušení každou milise

midterm2019

Príklad 5 - Benzén 3. Bilančná schéma 1. Zadanie príkladu n 1 = kmol/h Definovaný základ výpočtu. Na základe informácií zo zadania si ho bude v

Didaktické testy

Operačná analýza 2

Prepis:

Analýza toku dát Ján Šturc Zima 2010 Kompilátory

O čom to je? Počas kompilácie usudzujeme o vlastnostiach a chovaní sa programu počas behu. Čo nás zaujíma Vlastnosti, ktoré musia platiť vždy (invarianty) napr.: V príkaze x:= y + z je y vždy rovné 1. Pointer p vždy ukazuje do poľa a. Príkaz S sa nikdy nevykoná. Vlastnosti, ktoré platia často napr.: Spravidla sa príkaz S 1 vykoná častejšie ako príkaz S 2. Vlastnosti, ktoré sa musia aspoň raz splniť počas vykonávania programu (intermitenty) napr.: Počas vykonávania programu premenná x niekedy nadobudne hodnotu a. Zima 2010 2

Graf toku riadenia (blokový diagram) Uzly reprezentujú základné bloky Základný blok je postupnosť inštrukcií obsahujúca najviac jeden skok ako poslednú inštrukciu. Všetky vstupy do základného bloku vedú cez jeho hlavičku (prvú inštrukciu) Základný blok je (má byť) maximálny. Dôsledok: Ak sa základný blok začne vykonávať vykoná sa celý Hrany reprezentujú vlastný tok riadenia (skoky a vetvenie) Vzhľadom na definované inštrukcie je možné len binárne vetvenie. Pri zovšeobecnených úlohách obmedzenie na vetvenie neplatí. Zima 2010 3

Príklad grafu toku riadenia into add(n, k) { s = 0; a = 4; i = 0; if (k == 0) b = 1; else b = 2; while (i < n) { s = s + a*b; i = i + 1; } return s; } if (k == 0) return 4*n; else return 8*n; true b = 1; true s = 0; a = 4; i = 0; (k == 0) (i < n) s = s + a*b; i = i + 1; false b = 2; false return s; Zima 2010 4

Optimalizácia true b = 1; true s = 0; a = 4; i = 0; (k == 0) (i < n) s = s + a*b; i = i + 1; false b = 2; false return s; a*b nezávisí od premennej cyklu. Môžeme vypočítať raz, mimo cyklu. true s = s + z; i = i + 1; z = a*b; (i < n) false return s; Zima 2010 5

Zaujímavé body grafu toku riadenia Vstup do programu n 0 Body vetvenia (split) succ(n) = množina všetkých následníkov Vzhľadom na definíciu inštrukcie je stupeň týchto bodov vždy dva Body spájania (merge) pred(n) = množina všetkých predchodcov Môžu byť ľubovolného stupňa. Výstup z programu n F Eventuálne môžeme mať aj množinu finálnych uzlov Zima 2010 6

Problémy toku dát V čase kompilácie usudzujeme o hodnotách premenných a výrazov v čase behu. Vo všetkých zaujímavých bodoch chceme vedieť Z ktorého príkazu priradenia pochádza hodnota premennej v tomto bode? Ktorá premenná obsahuje hodnoty, ktoré nemajú po tomto bode použitie? (mŕtve premenné) Aké sú možné hodnoty (range) premenných v tomto bode? Zima 2010 7

Hlavná myšlienka Reprezentovať požadovanú informáciu hodnotami z úplného zväzu L = <L,,,, ; >. Popísať transformácie pri vykonávaní programu zväzovými operáciami. Pre každý blok definujeme prenosovú funkciu f B : L L. Ukázať, že tieto transformácie sú monotónne. Simuláciou behu programu Doprednou (forward), alebo Reverznou (backward) Určiť pevný bod Minimálny teoreticky sú možné aj iné pevné body. Pre väčšinu úloh je tento zväz priestor booleovských vektorov (hyperkocka) s operáciami a čiastočným usporiadaním po bitoch. Zima 2010 8

Prenosové funkcie Prenosové funkcie charakterizujú účinok bloku B na informáciu o toku dát Trieda prenosových funkcií F Musí obsahovať identickú funkciu (efekt prázdneho príkazu) Byť uzavretá vzhľadom na kompozíciu (zložený príkaz) (f,g F)(h = f(g(x)) F) Všetky funkcie v F musia byť monotónne (f F)(f(x) x) (f F)(x f(x)) Poslednú podmienku možno oslabiť na existenciu pevného bodu. Často bývajú tieto funkcie distributívne Distributívnosť implikuje monotónnosť x y znamená x y=y. Teda f(x y)=f(y). Podľa distrubutívnosti f(x y)=f(x) f(y). Teda f(x) f(y)=f(y), to znamená f(x) f(y). Zima 2010 9

Dopredná analýza toku dát Pre každý uzol n a jemu príslušný blok B n je definované in n informácia vcházajúca do uzlu n. out n informácia vychádzajúca z uzlu n. f Bn prenosová funkcia bloku B n. Riešenie musí splňovať rovnice: (rovnice toku dát) in n0 = I 0 n out n = f Bn (in n ) n n 0 in n = m pred(n) out m precondition Množinu rovníc iterujeme podľa (Tarského) vety o pevnom bode. V ďalšom uvedieme efektívnejšie metódy iterácie. Zima 2010 10

Reverzná analýza toku dát Pre každý uzol n a jemu príslušný blok B n je definované in n informácia vstupe do uzlu n. out n informácia na vystupe z uzlu n. rf Bn revezná prenosová funkcia bloku B n. Riešenie musí splňovať rovnice: (rovnice toku dát) n in n = rf Bn (out n ) n n f out n = m succ(n) in m out nf = O f postcondition Rovnice toku dát sa dajú zovšeobecniť aj pre množinu terminálnych bodov Vlastne pre každý smer analýzy stačí horná resp. dolná polovica zväzu. Optimalizačné polozväzy. Zima 2010 11

Rovnice toku dát Úlohou kompilátoru je zostaviť rovnice toku dát pre jednotlivé úlohy analýzy toku dát Reaching definitions forward Available expressions forward Live variables backward Use-definition chain: ku každému použitiu premennej pridávame zoznam všetkých premenných, ktoré reaches it. Definition-use chain: naopak ku každej definícii zoznam miest programu, kde je použitá. Iné atypické problémy Sign analysis (znamienková analýza) Riešenie rovníc je delegované na samostatný program, od ktorého si optimalizátor prevezme výsledky. Presnejšie kladie mu dotazy Zima 2010 12

Metódy riešenia rovníc toku dát Naívna iterácia round robin (A. Kildall. 1971) Initilize: for all n do {out n := ; in n := ;} in n0 = I 0 ; /* alebo out nf = O f ; */ Iterate: repeat for all equations do compute equation; until change occured; Tento algoritmus opakuje mnohé výpočty zbytočne Efektívnejšiu implementáciu dosiahneme, keď si počas práce algoritmu budeme udržovať pracovný zoznam (worklist) uzlov, ktorých sa zmeny týkajú. Zima 2010 13

Worklist algoritmus pre dopredné DFE for each n do out n := f n ( ); in n0 := I; out n0 := f n 0 (I); worklist := N - { n 0 }; while worklist Ø do { remove a node n from worklist; in n = m pred(n) out m ; } out n = f Bn (in n ); if out n changed then worklist := worklist succ(n); /* all successors of n must be added to the worklist */ V programe je zamlčaná implementácia worklist. Používa sa zásobník, fronta (queue) a prioritná fronta. Štruktúry pre worklist musia byť implementáciou množiny! Zima 2010 14

Worklist algoritmus pre reverzné DFE for each n do in n := f n ( ) for each n N final do { out n := O; in n := rf Bn (O); } worklist := N - N final ; while worklist Ø do { remove a node n from worklist; out n = m succ(n) in m ; in n = rf Bn (out n ); if in n changed then worklist := worklist pred(n); /* all predecessors of n must be added to the worklist */ } V tomto prípadade program zohľadňuje možnosť viacerých terminálnych uzlov. Zima 2010 15

Správnosť algoritmu Konštrukcia algoritmu zabezpečuje, že: Pre každý uzol platí vzťah medzi vstupom a výstupom (dopredne alebo spätne). Ak sa pri výpočte uzlu zmenia hodnoty, sa jeho následníci (predchodcovia pri reverznom spracovaní) dostanú znova do zoznamu spracovania worklist. Pri ich vybraní zo zonamu sa prepočítajú ich hodnoty. Znamená to, že program môže skončiť, iba ak sú splnené rovnice toku dát. Skončenie: Každá rovnica pre uzol je monotónna. To zaručuje, že niekedy nastane prípad, že hodnota v uzle sa už pri ďalších výpočtoch nebude meniť. Podľa Tarského vety. Každy uzol sa raz stabilizuje. Keď sa stabilizujú všetky uzly, výpočet skončí. Zima 2010 16

T 1 T 2 redukcia grafu Nech je daný orientovaný graf G=<N, E>, uvažujme transformácie (operácie): T 1 : Ak hrana e E je slučka, potom ju odstráň. T 2 : Ak vrchol n má jediného predchodcu vrchol p. Potom zlúč n a p do jedného vrcholu (np). Hranu p n zrušíme. Pričom succ(np) = succ(n) succ(p). Zjednotenie vychádzajúcich hrán. pred(np) = pred(p). Opakované použitie T 1 T 2 transformácie. Poradie operácií: Keď je možné T 1 nerobíme T 2. Ak je možných viac T 1 operácií (počiatočný graf môže mať slučky) na ich poradí nezáleží. Na poradí T 2 operácií nezáleží. Zima 2010 17

Príklad B 1 B 12 B 123 B 2 B 3 B 3 B 4 B 4 B 456 B 5 B 6 B 5 B 6 Zima 2010 18

Dva možné konce T 1 T 2 redukcie Jediný vrchol redukovateľný graf Graf homomorfný skoku do cyklu neredukovateľný graf B 2 B 1 B 3 Je to vlastne jediné neštruktúrovateľné použitie skoku. Dá sa opraviť opakovaním jedného z blokov cyklu. B 1 B 2 B 3 Je to aj odpoveď na otázku: Čo stojí štruktúrované programovanie? Najhorší prípad B 1 je jeden príkaz a B 2 a B 3 sú rovnaké. 3/2 násobné zväčšenie programu. B 3 Zima 2010 19

Riadenie výpočtu redukciou grafu Pri každej transformácii T 2 spojíme dva uzly. To zodpovedá približne zloženiu dvoch blokov eventuálne nejaké premenné vypadnú. Pri transformácii T 1 stabilizujeme cyklus Pre redukovateľné grafy tak dostaneme efektívnejší algoritmus. Nevýhody tohto prístupu Eliminácia závisí na na množine prenosových funkcií F. Efektívnosť závisí na výbere poradia transformácií. Nefunguje pre neredukovateľné grafy. Väčšina grafov toku riadenia je redukovateľná O reverzných grafoch (s obrátenou orientáciou hrán) to neplatí. Zima 2010 20

Depth-first kostra dept-first číslovanie grafu procedure dfs(n); { mark(n); // visited for each successor s of n do if s not marked then { add edge n s to T; dfs(s); } dfn[n]:= i; i:= i 1; } // main program follows { i:= 0; for each node n of G do { unmark(n); // unvisited i:= i + 1; } dfs(n 0 ); } 9 10 1 2 3 5 4 6 7 8 Zima 2010 21

Vlastnosti redukovateľných grafov Hrany grafu sú rozdelené do troch tried: 1) Kostrové dopredné (zelené) 2) Spätné (bordové) vedú ku svojmu predchodcovi (nemusí byť ani vlastný, ani bezprostredný). 3) Priečné (modré) Hrana n p spätná práve vtedy, keď dfn(p) dfn(n). Hĺbka grafu G depth(g) je maximálny možný počet spätných hrán v acyklickej ceste. Hĺbka grafu v redukovateľnom grafe nikdy nie je väčšia, ako maximálny počet vnorených cyklov v tomto grafe. Počet iterácií pri výpočte pevného bodu redukovateľného grafu T 1 T 2 transformáciami je depth(g)+3. Zima 2010 22

Úlohy analýzy toku dát Na špecifikáciu úlohy analýzy toku riadenia treba určiť: 1. Doménu (obor definície) 2. Optimalizačný polozväz 3. Prenosové funkcie 4. Inicializáciu Množina rovníc je už určená grafom toku riadenia a predošlými špecifikáciami. Zima 2010 23

Platnosť priradení Definícia premennej x je priraďovací príkaz x:=. Priradenie môže byť zrejmé (unambigous) Priraďovací príkaz x:=. Načítanie do premennej x: read(x), get(x),. Skryté (ambigous) priradenia: Priradenie cez smerník *y:= (alebo priradenie prvku pola). Volanie procedúry, ktorej argumenty sú volané referenciou. Volanie procedúry používajúcej nelokálne premenné (side efect). Definícia d premennej x z bodu p programu môže platiť (reaches) v bode n programu. Ak existuje cesta z p do n, po ktorej sa nevyskytuje žiadné zrejmé priradenie premennej x. Reaching definitions. Definícia d premennej x z bodu p programu musí platiť (is available) v bode n programu. Ak na žiadnej ceste z p do n, sa nevyskytuje žiadné (ani skryté) priradenie premennej x. Available expressions. Zima 2010 24

Syntaxou riadeným prekladom S id := E S 1 ; S 2 if E then S 1 else S 2 do S while E S 1 if E goto S 1 S 1 S 2 S 1 S 2 if E goto S 1 Zima 2010 25

Rovnice toku dát V každom príkaze (bloku S): Niečo vznikne (je nejaké priradenie) gen[s] Eventuálne nejaké priradenie prestane platiť kill[s] Každý príkaz (blok) má atribúty: Zdedený atribút in[s] Syntetizované atribúty out[s], gen[s] a kill[s] Platí rovnica (prenosová funkcia) príkazu (bloku): out[s] = gen[s] (in[s] kill[s]) gen[s] obsahuje len posledné priradenia premennej bloku. kill[s] sa vzťahuje len na definície do bloku vchádzajúce. S d: a:= b + c gen[s] = {d } kill[s] = D a {d } out[s] = gen[s] (in[s] kill[s]) Kde D a je množina všetkých doterajších definícií premennej a. Zima 2010 26

Zložený a podmienený príkaz S S 1 S 2 gen[s] = gen[s 2 ] (gen[s 1 ] - kill[s 2 ]) kill[s] = kill[s 2 ] (kill[s 1 ] - gen[s 2 ]) in[s 1 ] = in[s] in[s 2 ] = out[s 1 ] out[s] = out[s 2 ] S S 1 S 2 kill[s] = kill[s 1 ] kill[s 2 ] in[s 1 ] = in[s] gen[s] = gen[s 1 ] gen[s 2 ] in[s 2 ] = in[s] out[s] = out[s 1 ] out[s 2 ] Zima 2010 27

Cyklus a jeho stabilizácia S S 1 in[s 1 ] = in[s] out[s 1 ] out[s 1 ] = gen[s 1 ] (in[s 1 ] - kill[s 1 ]) gen[s] = gen[s 1 ] kill[s] = kill[s 1 ] in[s 1 ] = in[s] gen[s 1 ] out[s] = out[s 1 ] Predpokladáme o 0 = Ø i 1 = j o 0 = j o 1 = g (i 1 - k) = g (j - k) i 2 = j o 1 = j g (j - k) = j g o 2 = g (i 2 - k) = g (j g - k) = g (j - k) i = j o o = g (i - k) Zima 2010 28

Dátové štruktúry pre výpočet Potrebujeme reprezentovať množiny definícií. Vhodnou reprezentáciou je powerset (bitový vektor) Operácie a sú boolovské operácie po bitoch. Doména L je množina všetkých podmnožín množiny všetkých definícií v programe. je zjednotenie je prienik je množinová inklúzia je prázdna množina Ø je množina všetkých definícii D Uvedená štruktúra množina všetkých podmnožín voľakej množiny je boolovský (teda aj úplný) zväz. Zima 2010 29

Reaching definitions L = powerset všetkých definícií v programe (množina všetkých podmnožín množiny všetkých definícií v programe) = (order is ) = Ø I0 = in n0 = F = množina všetkých funkcií tvaru f(x) = gen (x-kill) kill je množina všetkých definícií, ktoré sú v uzle zrušené gen je množina definícií, ktoré uzol generuje. Úloha je dopredná. Zima 2010 30

Available expressions L = powerset všetkých definícií v programe (množina všetkých podmnožín množiny všetkých definícií v programe) = (order is ) = Ø I 0 = in n0 = F = množina všetkých funkcií tvaru f(x) = gen (x-kill) kill je množina všetkých definícií, ktoré sú v uzle zrušené gen je množina definícií, ktoré uzol generuje. Úloha je dopredná. Zima 2010 31

Živé premenné live variables L = powerset všetkých premenných v programe (množina všetkých podmnožín množiny všetkých premenných v programe) = (order is ) = Ø I0 = in n0 = F = množina všetkých funkcií tvaru f(x) = gen (x-kill) kill je množina premenných, ktorým uzol priraďuje hodnotu skôr ako ich použije gen je množina premenných, ktoré uzol používa skôr ako ich definuje Úloha je reverzná. Zima 2010 32

Príklad Block B1 B2 B3 B4 B5 B6 DEF {a,b} {c,d} { } {d} {e} {a} USE { } {a,b} {b,d} {a,b,e} {a,b,c} {b,d} Zima 2010 33

DFA úlohy z dračej knihy 1 Pozn: Ullman všetky úlohy formuluje pre horný polozväz a hladá minimálny pevný bod. Duálny problém dolný polozväz a maximálny pevný bod. Úplný zväz potrebujeme len pre obojsmerné problémy. Zima 2010 34

DFA úlohy z dračej knihy 2 Anticipated expressions = very busy expressions Zima 2010 35

DFA úlohy z dračej knihy 3 earliest[b] = anticipated[b].in available[b].in latest[b] = (earliest[b] postponable[b].in) (e_use B ( S succ(b) (earliest[s] postponable[s].in))) Zima 2010 36

Atypické DFA úlohy sign analysis Zaujímame sa len o znamienká premenných a výrazov. Výpočtový zväz Dolný polozväz. Dopredná úloha. je chybová hodnota napr. delenie nulou. Modus operandi: Výrazy v blokoch vyhodnocujeme podľa tabuliek operácii. Výrazy, ktoré vznikli po rôzných cestách podľa zväzových operácií. - 0 + 0- -+ 0+ Tabuľka násobenia 0- -+ 0+ - 0 + 0 0-0+ 0-0+ 0 0- -+ -+ -+ 0 -+ 0+ 0-0+ 0-0 0+ - 0+ -+ 0- + 0-0 0 0 0 0 0 0 0 + 0- -+ 0+ - 0 + Prenosové funkcie: Na počiatku každá premenná má hodnotu. Príkaz v:= c priradí premennej v jednu z hodnôt { -, 0, +}, podľa hodnoty konštanty c. Priraďovací v:= a op b. Určí hodnotu premennej v z hodnôt operandov podľa tabuľky pre operáciu op. Zima 2010 37

Constant folding, constant propagation Používa sa: určite nie je konštanta -2-1 0 1 2 Skúsil by som: Dá sa využiť, že: 0 v = 0 a / a = 1 Nevýhoda: Treba vzlášť sledovať aj rovnosť konštánt po cestách. neviem chyba 0 1 c v C neviem Zima 2010 38