2012 2a. C rc; void main() { rc = new C (); rc.m2(); } } INF 3110/ INF /28/13 1

Like dokumenter
MED SVARFORSLAG UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Runtimesystemer - II. Funksjoner som parametere. Virtuelle metoder

MED SVARFORSLAG UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet

Anatomien til en kompilator - I

Diverse eksamensgaver

UNIVERSITETET I OSLO

Runtime-omgivelser Kap 7 - I

Runtimesystemer Kap 7 - I

Anatomien til en kompilator - I

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Repetisjon: Statiske språk uten rekursive metoder (C1 og C2) Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Semantisk Analyse del III

UNIVERSITETET I OSLO

Plan: Parameter-overføring Alias Typer (Ghezzi&Jazayeri kap.3 frem til 3.3.1) IN 211 Programmeringsspråk

UNIVERSITETET I OSLO

Datatyper og typesjekking

Beskrivelse av programmeringsspråket Compila15 INF Kompilatorteknikk Våren 2015

Datatyper og typesjekking

Datatyper og typesjekking

Datatyper og typesjekking

Generiske mekanismer i statisk typede programmeringsspråk

Konstruktører. Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver. skjer følgende:

2 Om statiske variable/konstanter og statiske metoder.

Kap 6.4: Typesjekking Foiler ved Birger Møller-Pedersen Forelest av Stein Krogdahl 19. og 23. mars Dagens tema: Typer og typesjekking

Beskrivelse av programmeringsspråket Simpila INF Kompilatorteknikk Våren 2012

Runtimesystemer Kap 7 - I

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

Runtime-omgivelser Kap 7 - II

Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

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

Skal bindes opp til en deklarasjon av samme navn

Skal bindes opp til en deklarasjon av samme navn

Dagens tema: Kjøresystemer II

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

Litt om Javas class-filer og byte-kode

INF Oblig 2 semantikksjekk og kodegenerering

Enkle generiske klasser i Java

Javas klasse-filer, byte-kode og utførelse (og litt om C# sin CIL-kode)

2 Om statiske variable/konstanter og statiske metoder.

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

Om oppgaveteksten på noe punkt er uklar eller upresis, kan du gjøre egne presiseringer. Formulér i så fall disse tydelig i oppgavebesvarelsen din.

INF5110. Oblig 2 presentasjon

Kap 6.3: Symboltabellen Foiler ved Birger Møller-Pedersen Forelest av Stein Krogdahl 17. mars Dagens tema:

Arv. Book book1 = new Book(); book1. title = "Sofies verden" class Book { String title; } class Dictiona ry extends Book {

Fiktiv eksamensbesvarelse IN 211 høsten 2001

Eksekveringsrekkefølgen (del 1) Oppgave 1. Eksekveringsrekkefølgen (del 2) Kommentar til oppgave 1. } // class Bolighus

INF Repetisjon: Hvordan bygge treet og analysere? 8. september Typisk situasjon. De problematiske syntaks-diagrammene

Obligatorisk Innlevering 2

Programmering i C++ Løsningsforslag Eksamen høsten 2005

UNIVERSITETET I OSLO

INF1010 våren 2008 Uke 4, 22. januar Arv og subklasser

Eivind Gard Lund. 24. Mars 2009 Foilene bygger på 2009 utgaven av Andreas Svendsen

class Book { String title; } class Dictionary extends Book { int wordcount; } class CartoonAlbum extends Book { int stripcount; }

INF1000: Forelesning 7

INF Notater. Veronika Heimsbakk 10. juni 2012

Viktig. Rettet i koden. Oppgaven. Obligatorisk oppgave 2 - Kort om oppgaven og litt informasjon. Fredrik Sørensen OMS-gruppen, IfI

INF1010 Arv. Marit Nybakken 2. februar 2004

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

INF1000 Metoder. Marit Nybakken 16. februar 2004

Kjøresystemer. Hva er et kjøresystem? Den abstrakte maskinen SIMPLESEM (2.6) Klassifisering av språk: Parametre (2.7.7) Statiske språk (

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Semantisk Analyse del I

INF1000: Forelesning 7. Konstruktører Static

Ark 1 av 18. programmeringsspråkenes. Velkommen til IN 211. verden. IN 211 Programmeringsspråk

Oblig 2 - Simpila. INF Kompilatorteknikk. Våren Typesjekking, sjekking av bruk av navn og blokkstrtuktur i språk.

Dagens tema: Sjekking

UNIVERSITETET I OSLO

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

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

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

UNIVERSITETET I OSLO

INF1000 : Forelesning 4

UNIVERSITETET I OSLO

i=0 i=1 Repetisjon: nesting av løkker INF1000 : Forelesning 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker j=0 j=1 j=2 j=3 j=4

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

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

Generiske mekanismer i statisk typede programmeringsspråk INF5110 April, 2009

INF1010 våren januar. Objektorientering i Java

I et Java-program må programmøren lage og starte hver tråd som programmet bruker. Er dette korrekt? Velg ett alternativ

Semantikk. Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7) Semantikk. Semantikk. En måte å svare på: gi semantikken til språket!

INF1010, 15. januar time. Parametriserte klasser (generiske klasser) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

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 tema: Mer av det dere trenger til del 1

Dagens tema C, adresser og pekere

Ark 3 av 26. printf("i adresse %08x ligger b med verdien %d.\n", &b, b); printf("i adresse %08x ligger a med verdien %d.

Runtime- systemer del III

Eksamen. Objektorientert Programmering IGR 1372

Transkript:

2012 2a Vi tenker oss i denne oppgaven at vi har et Java-lignende språk hvor metoder kan ha lokalt definerte metoder. Dessuten kan man deklarere variable og metoder også på ytterste programnivå. Dette skal fungere som vanlig i språk som er statisk skopet. Det følgende er et program i dette språket. Oppstart av programmet skjer ved å kalle main-metoden. { class C { void m1(){ void f() {}; f(); } void m2() { int i; void g() { int j; j=i; }; i=1;rc.m1(); }; }; C rc; void main() { rc = new C (); rc.m2(); } } 5/28/13 1

2012 2a Tegn kall-stakken som den ser ut når aktiveringsblokken ( activation record ) for f er på toppen av stakken for første gang, inklusive variable, access-linker og control-linker, bortsett fra access-linker for metoder som er direkte deklarert i en klasse (kan da anta at access-linken peker til C-objektet, men dette er ikke viktig for oppgaven). 5/28/13 2

2012 2b I resten av oppgave 2 innfører vi metoder som parametere. Det er en regel at aktuelle parametere til slike må være metoder som er direkte synlige fra kallstedet. Eksemplet over blir så endret slik at f blir en metodeparameter, og kallet på f i m1 blir da et kall på en metodeparameter: { class C { void m1(void f()){ f(); } void m2() { int i; void g() { int j; j=i; }; i=1; rc.m1(g); }; }; C rc; void main() { rc = new C (); rc.m2(); } } 5/28/13 3

2012 2b Tegn kall-stakken som den ser ut når aktiveringsblokken for kallet rc.m1(g) er på toppen av stakken. Hvordan representeres metoden g i denne aktiveringsblokken slik at kallet på parameteren f (dvs kallet f() i m1) kan utføres? Parameteren f er representert ved et par <ip, ep>, hvor ip peker ut koden for den aktuelle parameteren og hvor ep peker ut aktiveringsblokken for den blokken som tekstlig omslutter definisjonen av den aktuelle parameteren. I det aktuelle kall peker ip ut koden for g og ep peker ut aktiveringsblokken for m2, hvor g er definert. 5/28/13 4

2012 2c Tegn kall-stakken som den ser ut når aktiveringsblokken for kallet av f i m1 er på toppen av stakken. Forklar hvordan access-link for aktiveringsblokken på toppen av stakken settes i dette spesielle tilfellet. Access link for g settes vha ep-delen av den closure som f er representert ved, og denne peker på aktiveringsblokken for m2 5/28/13 5

2012 3a Det følgende er en del av en grammatikk for et språk med klasser. Det er bare tatt med de produksjoner som har betydning. Klasser har for eksempel også variable, men de er ikke viktige her. class class name { methoddecls } methoddecls methoddecls ; methoddecl methoddecls methoddecl methoddecl type? name ( parameters ) body parameters parameters, parameter parameters parameter parameter type name type int type bool 5/28/13 6

2012 3a Den regel som skal spesifiseres ved hjelp av en attributtgrammatikk er at en klasse kan ha flere enn én constructor, men de må ha forskjellige signaturer i form av antall og/ eller typer av parametere. Lag attributtgrammatikken basert på ideen om at methoddecl har et attributt constructorname som er satt sammen av navnet på metoden og strenger som tilsvarer typene på parameterne. En constructor C med parametertypene (int, int) vi således få constructorname C_i_i, mens en constructor C med parametertyper (int, bool) vil få constructorname C_i_b. Testen vil derfor være, som antydet i første rekke i tabellen under, at alle navne i mengden av constructornavne er forskjellige. Vi innrømmer at dette ikke er det mest optimale, men det er ikke poenget her. Definer de regler som gjør denne testen mulig. Anta at du har funksjoner og operatorer for å innsette navne i en menge og for å konkatenere strenge og tegn. 5/28/13 7

2012 3a 5/28/13 8

2012 3a.1 5/28/13 9

2012 3a.2 5/28/13 10

2011-2 Anta at vi har et objekt-orientert språk, hvor en virtuell metode i en klasse kan redefineres ( overriding ) i en subklasse av denne klassen. En virtuell metode deklareres med en virtual modifier, mens en redefinisjon deklareres med modifieren redef. Metoder uten virtual er vanlige metoder og kan altså ikke redefineres. Merk at dette ikke er helt som i Java. I Java er alle metoder virtuelle, mens her gjelder det bare de som har modifieren virtual. 5/28/13 11

2011-2a Vi antar nå først at klassen for et gitt objekt bestemmer, på vanlig måte, hvilken versjon av en virtuell metode som kalles. Lag virtuell-tabellene for klassene A, B, C, D,E og F. For hvert element i tabellene skal du bruke notasjonen A::m for å angi hvilken metode som gjelder. Indeksen i disse tabeller starter på 1. 5/28/13 12

2011-2b I resten av oppgaven skal vi for virtuelle metoder ha den semantikk at en redefinert virtuell metode, for eksempel m, skal, som det første den gjør, kalle den tilsvarende virtuelle eller redefinerte metode (dvs m ) i den nærmeste superklasse som har en slik, før den utfører sin egen body. Dette vil i sin tur føre til at redefinerte eller virtuelle metoder m i videre superklasser utføres. Dette kunne man implementere ved å sette inn det riktige kall som første statement i bodies på redefinerte metoder. Men semantikken rundt parameteroverføring skal her være litt spesiell slik at denne enkle måten ikke vil fungere. Parametrene som gis med i det opprinnelige kallet skal nemlig gå direkte som parametre til den metoden som utføres først, altså den som er merket virtual i programmet. Når denne er ferdig utført skal de verdiene som da står i dens parametervariable overføres som aktuelle parametre til den neste dypere redefinerte metode, osv. Dette gjør at stakken av kall må settes opp først, og de aktuelle parametre må gis til den første virtuelle metode som skal utføres. Hvis for eksempel m kalles med m(1,2) på et D-objekt, så skal stakken settes opp og de aktuelle parametre gis til aktiveringsblokken tilsvarende A::m, og utførelsen skal starte med utførelsen av A::m. Ved exit av A::m skal verdiene av parametrene x og y gis som aktuelle til den versjon av m som da skal utføres. 5/28/13 13

2011-2b For å implementere denne nye semantikk utvides virtuell-tabellen, slik at det for hvert indeks blir en liste av metode-angivelser. Denne listen vil dermed angi sekvensen av de metoder som skal kalles. Tegn de nye virtuell-tabeller for klassene D og F. Tabellene for B og C er gitt under. For metode-angivelser brukes samme notasjon som før. 5/28/13 14

2011-2c I denne del av oppgaven skal du skissere hvordan stakken i 2b kan lages ved hjelp av de nye virtuell-tabeller. Du kan anta at du har en run-time rutine makeactivationrecord(metode). Denne tar som parameter en metode-angivelse (for eksempel A::m) med nok informasjon til å lage en aktiveringsblokk med riktig størrelse, men du skal skissere hvordan control-link og retur-adresse settes i aktiveringsblokken. Anta at den aktuelle virtuell-tabell holdes i en variabel med navn vt, den aktuelle metoden holdes i en variabel method, og funksjonen index(method) gir deg index i vt. Anta videre at inngangen i tabellen gir en peker til første metode-angivelse, og at hver av disse har en next peker. For metode-angivelsen som svarer til den virtuelle metode hvor den defineres for første gang (i eksemplet her m i A) er denne peker none. Du kan gjerne illustrere resultatet for et kall m(1,2) på et D-objekt, men om resten er riktig er det OK uten. 5/28/13 15

2011-2c 5/28/13 16

2011-2d Overføring av parametre mellom de enkelte utførelser av en virtuell metode kan åpenbart ikke gjøres som en del av det å sette opp stakken i 2c, men må gjøres ved bl.a. å sette inn ekstra kode i metoder merket virtual eller redef. Hvilken kode skal settes inn og hvor? Koden kan gjøre bruk av alle deler av den aktuelle aktiveringsblokk. 5/28/13 17