INF mai 2014 Stein Krogdahl, Ifi, UiO

Like dokumenter
Dette er foiler til: 1. Tilleggsnotat fra bok av Aho, Sethi og Ullman Notatet legges ut på undervisnings-planen. Beklager dårlig kopi!

Kodegenerering, del 2: Resten av Kap. 8 pluss tilleggsnotat (fra kap. 9 i ASU ) INF5110 V2007

Mer kodegenerering: Tilleggsnotat fra AHU. INF mai Stein Krogdahl,

Mer kodegenerering: Tilleggsnotat fra AHU Om Javas Byte-kode INF april 2009

Oppgaver til kodegenerering etc. INF-5110, 12. mai, 2015

INF mai 2014 Stein Krogdahl, Ifi, UiO

Oppgaver til kodegenerering etc. INF-5110, 16. mai, 2014

UNIVERSITETET I OSLO

Kodegenerering del 3: Tilleggsnotat fra AHU Samt litt om class-filer og byte-kode INF5110 V2007. Stein Krogdahl, Ifi UiO

UNIVERSITETET I OSLO

INF5110 V2013 Stoff som i boka står i kap 4, men som er generelt stoff om grammatikker

Kap. 5, Del 3: INF5110, fra 1/3-2011

Kap. 4 del I Top Down Parsering INF5110 v2006. Stein Krogdahl Ifi, UiO

INF5110 V2012 Kapittel 4: Parsering ovenfra-ned

Stoff som i boka står i kap 4, men som er. 10. Februar Ifi, UiO

MED SVARFORSLAG UNIVERSITETET I OSLO

Med Svarforslag UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet. 3 sider (side 6, 7 og 8, rives ut, fylles ut og leveres)

Stoff som i boka står i kap 4, men som er

Kap.4 del I Top Down Parsering INF5110 v2005. Arne Maus Ifi, UiO

UNIVERSITETET I OSLO

INF oktober Dagens tema: Uavgjørbarhet. Neste uke: NP-kompletthet

INF5110, onsdag 19. februar, Dagens tema: Parsering ovenfra-ned (top-down)

UNIVERSITETET I OSLO

Obligatorisk oppgave 2 - inf

Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier. 11. okt Siri Moe Jensen Inst. for informatikk, UiO

INF / Kap. 5, Del 2 Stein Krogdahl, Ifi, UiO

INF-5110 Oppgaver kodegenerering etc. INF-5110, vår 2011

UNIVERSITETET I OSLO

Kap.4 del 2 Top Down Parsering INF5110 v2005. Arne Maus Ifi, UiO

INF Algoritmer og datastrukturer

Dagens plan: INF Algoritmer og datastrukturer. Grafer vi har sett allerede. Det første grafteoretiske problem: Broene i Königsberg

Velkommen til. INF våren 2017

INF /2, 2015 Kap. 5, Del 2 Stein Krogdahl, Ifi, UiO

Velkommen til. INF våren 2016

Korteste Vei I. Lars Vidar Magnusson Kapittel 24 Hvordan finne korteste vei Egenskaper ved korteste vei

Enkle generiske klasser i Java

INF 4130 Oppgavesett 3, 20/ m/løsningsforslag

2 Om statiske variable/konstanter og statiske metoder.

Kap. 4: Ovenfra-ned (top-down) parsering

INF Algoritmer og datastrukturer

var y :{x :T R}; S endvar y

Hovedstoffet i kap 4: 16. Februar Ifi, UiO

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

Runtimesystemer Kap 7 - I

Oppgavene 1, 2, 4, 5, 6, 9, 12 og 13 passer best til å løses ved en datamaskin.

INF5110 Obligatorisk Oppgave 2 del 2. Andreas Svendsen SINTEF. 23. April Oversikt

UNIVERSITETET I OSLO

Runtimesystemer - II. Parameteroverføring Call by value Call by reference Call by value-result Call by name INF 3110/ INF

Kap. 8 del 1 kodegenerering INF april, 2008

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

INF april, 2013 Kap. 8 Noen oppgaver som er meget relevante for Oblig 2

INF Algoritmer og datastrukturer

Kap. 5, Del 2: INF / (og 2/3 og 3/3)

Kap. 5, del 1: Parsering nedenfra-opp (Bottom up parsing) INF5110. Stein Krogdahl Ifi, UiO

Kap. 5, Del 2: SLR(1), LR(1)- og LALR(1)-grammatikker INF /2-2011

Dagens plan. INF Algoritmer og datastrukturer. Koding av tegn. Huffman-koding

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

Kap. 4, del I: Top Down Parsering Pluss oppgave til kapittel 3 INF5110 V2008

Dagens plan: INF Algoritmer og datastrukturer. Eksempel. Binære Relasjoner

INF Algoritmer og datastrukturer

PROGRAMMERING I MAPLE

INF3140 Modeller for parallellitet INF3140/4140: Programanalyse

INF Algoritmer og datastrukturer

INF5110 Kap. 5: Parsering nedenfra-og-opp (Bottom-up parsing) 21/ Stein Krogdahl Ifi, UiO. Angående Oblig 1:

Obligatorisk oppgave 2 inf

UNIVERSITETET I OSLO

INF april, 2015 Stein Krogdahl Ifi, UiO. Svar på oppgaver til kap. 8. Ble lagt ut 24. april

Forelesning 33. Repetisjon. Dag Normann mai Innledning. Kapittel 11

IN Algoritmer og datastrukturer

Matchinger i ikke-bipartite grafer

Avsluttende om kodegenerering: Tilleggsnotat fra AHU Samt: En oversikt over bruk av Javas Byte-kode

INF Noen oppgaver til kap. 8

Velkommen til. IN1010 Objektorientert programmering Våren 2018

MAT1030 Diskret matematikk

Innledning. MAT1030 Diskret matematikk. Kapittel 11. Kapittel 11. Forelesning 33: Repetisjon

Kap. 5, del 2 LR(1)- og LALR(1)-grammatikker INF5110 V2008

Hovedstoffet i kap 4:

NOTAT (pensum!) Javas klasse-filer, byte-kode og utførelse. INF 5110, 10/5-2011, Stein Krogdahl

Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

Forelesning inf Java 4

Runtime-omgivelser Kap 7 - II

INF april, 2014 Stein Krogdahl Ifi, UiO. Svar på oppgaver til kap. 8

INF Algoritmer og datastrukturer

Litt om Javas class-filer og byte-kode

Kap.4, del 2: Top Down Parsering Kap. 5, del 1: Bottom Up Parsing INF5110, 7/ Legger ut en oppgave til kap. 4 (se beskjed).

INF Noen oppgaver til kap. 8

NOTAT (pensum!) Javas klasse-filer, byte-kode og utførelse

INF og 13. april, Stein Krogdahl, Ifi UiO

INF oktober Stein Krogdahl. Kap 23.5: Trær og strategier for spill med to spillere

Kap. 5 del 2: LR(1)- og LALR(1)-grammatikker INF5110 V2005. Stein Krogdahl, Ifi, UiO

Forelesning inf Java 1

2 Om statiske variable/konstanter og statiske metoder.

Løsningsforslag for eksamen i fag SIF8010 Algoritmer og datastrukturer Lørdag 9. august 2003, kl

INF1020 Algoritmer og datastrukturer GRAFER

INF Algoritmer og datastrukturer

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.

Dagens plan INF3170 Logikk. Obliger og eksamen. Forelesning 1: Introduksjon, mengdelære og utsagnslogikk. Christian Mahesh Hansen og Roger Antonsen

Transkript:

INF5110 7. mai 2014 Stein Krogdahl, Ifi, UiO Dette er foiler om global data-analyse NB: Disse foilene er også pensum (men stoffet finnes bare her på disse foilene.)

Global dataflyt-analyse, eksempler: Gitt en TA-instruksjon der variablen x brukes: Finn alle de tilordninger (definisjoner) der denne verdien på x kan ha vært satt Gitt en tilordning der x blir satt: Finn alle de steder der denne verdien av x kan bli brukt Disse og liknende ting: Kan lett bergenes ved en kompletterings-algoritme omtrent som når vi finner First og Follow. Vi skal se på en slik algoritme som finner: Hvilke variable som faktisk er i live etter hver basal blokk

Vi skal se på global dataflyt-analyse for å finne: Hvilke variable er egentlig i live etter en basal blokk? Vi har tidligere antatt at alle programvariable er i live etter hver basal blokk, og at ingen temporær-variable er det. Den analysen vi ser på her vil gi på hvilke variable som faktisk er i live etter hver blokk. Altså, gitt en blokk: For hvilke variable det er mulig at deres verdi på slutten av blokka vil bli brukt videre i utførelesen. Vi kan godt her også tillate at temporære variable kan bære verdier fra en basal blokk til en annen (og altså kan være i live etter en blokk).

Data for algoritmen som finner: Hvilke variable er i live etter en basal blokk Hver basal blokk har, ut fra strukturen på flytgrafen, en mengde av (direkte) etterfølgere og forgjengere (mengder av basale blokker), og disse vil altså være konstant gjennom algoritmen! Begge disse mengdene kan inkludere blokken selv Under algoritmen har hver basal blokk to mengder av variable knyttet til seg (og disse vil stadig få flere elementer gjennom algoritmen) InLive: Dette skal bli mengen av variable som er i live helt i starten av den aktuelle blokka. Initielt er denne mengden tom for alle blokker. OutLive: Dette skal bli mengden av variable som er i live helt på slutten av den aktuelle blokka. Det er den vi egentlig er interessert i (for å kunne initialisere algoritmen som finner NextUse etc. med så få variable som mulig). Også disse skal fra starten være tomme.

Eksempel på de forskjellige mengder m.m. Forgjenger-mengdene er: For B1: ingen (starten av alg.) For B2: B1 For B3: B2 og B3 For B4: B3 For : B1 og B1 : InLive : OutLive Denne instruksjonen tenker vi oss byttet ut med: return (fact)

Mer global dataflyt-analyse Ved global analyse ser vi på hele flytgrafen for en metode Vi ser på hver basal blokk, og koker den informasjonen vi trenger om hver variabel i hver blokk ned til ett av følgende tre tilfeller: 1) Blir den verdien som er i variablen ved inngang av blokken brukt før den eventuelt blir gitt ny verdi ved tilordning? 2) Får variablen ny verdi ved tilordning før den eventuelt blir brukt? 3) Blir variablen hverken brukt eller får ny verdi? Denne informasjonen kan lett samles inn for hver blokk og hver variabel. Algoritmen vil generelt arbeide seg bakover, både gjennom de basale blokkene, og langs kantene.

Hva kan vi i de tre tilfellene slutte om: Innholdet av InLive når vi kjenner OutLive 1) Den verdien som er i variablen x ved inngang av blokken blir brukt før x eventuelt blir gitt ny verdi ved tilordning. Eksempler: x = x + y a = x + y y = u + v y = u + v Her skal InLive inneholde x uansett om den var med i OutLive eller ikke 2) Variablen x får ny verdi ved tilordning før den eventuelt blir brukt. Eksempler: x = u + v x = u + v a = x + y a = w + y Her skal InLive ikke inneholde x uansett om den var med i OutLive eller ikke 3) Variablen x blir hverken brukt eller får ny verdi i blokka. Eksempel: a = w + y w = u + v Her skal InLive inneholde x hvis og bare hvis den var med i OutLive

Kompletterings-algoritmen: Selve algoritmen går på at vi utfører følgende kompletteringssteg så lenge ett av de tre gir noe nytt for en eller annen variabel og en eller annen blokk: Tilbakeføring gjennom en blokk: Velg en variabel og en blokk, og se om det er tilfelle 1), 2) eller 3). Ut fra det og innholdet i OutLive, avgjør så om x skal med i InLive. Tilbakeføring fra InLive til forgjengerenes OutLive: Se på en InLive-mengde, og sørg for alle dens variable er inkludert i OutLine-mengdene til alle forgjenger-blokker Virker fordi alt som her legges inn i en av mengdene InLive eller OutLive ved disse skrittene må være med i de respektive mengdene, og fordi vi til slutt må få med alle som skal være med (siden alt er endelig). Det som til slutt står i OutLive-mengdene er nå de riktige (og disse kan så brukes som initialisering til algoritmen som finner next-use etc.)

Eksempel: Finn hvilke variable som er i live etter hver basal blokk. a = 5 B1 B0 x = 8 y= a + x Initialisering: Alle mengder er tomme (= ) B2 B3 B4 a = a + 1 y= 3 + z z = a + x a = y + z a = y + 8 y= 3 a = x + y = a + z Return

a = 5 B0 Et par skritt senere B1 x = 8 y= a + x B2 B3 B4 a = a + 1 y= 3 + z z = a + x a = y + z a = y + 8 y= 3 a = x + y = a + z Return

B0 a = 5 InLive for B2, B4 og outlive for B3 B1 x = 8 y= a + x B2 a x z B3 B4 a = a + 1 y= 3 + z z = a + x a = y + z a = y + 8 y= 3 a x z a = x + y = a + z Return

B0 a = 5 B1 a z x = 8 y= a + x InLive for B3 outlive for B1 og så inlive for B1 a B2 a x z B3 a x y B4 a = a + 1 y= 3 + z z = a + x a = y + z a = y + 8 y= 3 a x z a = x + y = a + z Return

z a = 5 B0 Til slutt outlive og inlive for B0. Sluttsituasjonen: a z B1 a z x = 8 y= a + x a I tillegg skal inlive til B1 inn i outlive til B3, men det gir ikke noe nytt, så vi er ferdig. Ellers måtte vi tatt en ny runde bakover fra B3 til B2 osv. B2 a x z B3 a x y B4 a = a + 1 y= 3 + z z = a + x a = y + z a = y + 8 y= 3 a x z Kommentar: Her ser vi altså at z er i live før programmet starter. Det vil altså si at den verdien z har fra starten kan bli brukt i programmet. Dette kan tyde på at noe er galt, eller at z f.eks. er en parameter til hele metoden a = x + y = a + z Return

En oppgave: En liten vri på situasjonen gir dette til en mer interessant oppgave. B0 a = 5 y = a - 1 B1 x = y + 8 y= a + x B2 B3 B4 z = a + 1 y= 3 + z z = a + x a = y + z a = y + 8 y= 3 a = x + y = a + 1 Return