1 / 12

Nå fredag (26/4): Det blir ikke undervisning Oblig 2:

INF5110 – 23. april, 2013 N oen oppgaver til kap . 8 Dette er en bedre utgave av oppgavene, lagt ut 24. april. Nå fredag (26/4): Det blir ikke undervisning Oblig 2: Merk at den må levers før fristen (senest 1/5). Dersom den ikke aksepteres får man den tilbake for retting.

nasnan
Download Presentation

Nå fredag (26/4): Det blir ikke undervisning Oblig 2:

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. INF5110 – 23. april, 2013Noen oppgaver til kap. 8Dette er en bedre utgave av oppgavene, lagt ut 24. april Nå fredag (26/4): Det blir ikke undervisning Oblig 2: Merk at den må levers før fristen (senest 1/5). Dersom den ikke aksepteres får man den tilbake for retting.

  2. Oppgave8.1.c plusslitt r + Lag for hånd TA-kode for følgende uttrykk: a * b + a * b * c Du skal ikke prøve å optimalisere koden. Velg variabelnavn på temporære som t1, t2, osv. : y x * * z b a c * a b Her er et ADT for uttrykket, og det er en metode i hver node. Angi i hvilken node de forskjellige deler av TA-koden blir produsert.

  3. Oppgave8.1.c, med optimalisering Lag for hånd TA-kode for følgende uttrykk: a * b + a * b * c Du skal nå prøve å optimalisere koden, ved ikke å beregne samme subuttrykk om igjen. + z x * * y b a c * a b Her er et ADT for uttrykket, og det er én kodegen.-metode i hver node. Tenk på hvordan en kompilator skulle kunne gjøre slike optimaliseringer.

  4. Oppgave8.2.c P-kode z + y u Lag for hånd P-kode for følgende uttrykk: a * b + a * b * c Du skal her ikke prøve å optimalisere koden. * * p x v w b a c * r q a b Her er et ADT for uttrykket, og det er én metode i hver node. Angi i hvilken node de forskjellige deler av P-koden blir produsert.

  5. Oppgave8.2.c, P-kode med optimalisering Lag for hånd P-kode for følgende uttrykk: a * b + a * b * c Du skal nå prøve å optimalisere koden, ved ikke å beregne samme uttrykket om igjen. Foreslå en ekstra P-instruksjon slik at dette går an.

  6. Oppgave: If-setningeroppg. 1. P-kode • I den følgende if-setninger b, c ogd boolske variable • if (b and c or d) a = x else x = a ; Bet. tolkes slik: ((b and c) or d) • Lag P-kode for denne pr. hånd der betingelsen ikke er kortsluttet, og slik at betingelsen blir beregnet til en logisk verdi.

  7. If-setningeroppg. 2. P-kode med kortslutning • I den følgende if-setninger b, c ogd boolske variable • if (b && c || d) a = x else x = a ; • Lag P-kode for denne der betingelsen blir kortsluttet og slik at alle hopp går så direkte som mulig.

  8. Oppgave: If-setningeroppg. 3, TA-kode • I den følgende if-setninger b, c ogd boolske variable • if (b and c or d) a = x else x = a ; • Lag TA-kode for denne der betingelsen ikke er kortsluttet og slik at den blir beregnet til en logisk verdi.

  9. Oppgave: If-setningeroppg. 4, Med kortslutning • I den følgende if-setninger b, c ogd boolske variable • if (b && c || d) a = x else x = a ; • Lag TA-kode for denne der betingelsen blir kortsluttet og slik at alle hopp går så direkte som mulig. Kodegenereings-metode diskuteres i pensum-foilene. Det blir lite «vanlige» TA-instruksjoner her!

  10. Lag OO-versjonav program somgenerererkode med kortslutning for betingelser • Et program fra pensumfoilene som gjør dette ligger på neste foil. Oppgaven er å skrive det i en objektorientert stil. • Oppsett for svar ligger på foilen deretter.

  11. Men heller ikke denne vil lage helt god kode! Hvorfor?? (se helt nederst) Genere TA-kode for boolskeuttrykk Vi bryr oss ikke med retur-navnet, siden de alltid vil hoppe ut For ”||”: voidgenBoolCode(StringlabT, labF) { … case ”||”: { Stringlabx = genLabel(); left.genBoolCode(labT, labx); emit2(”label”, labx); right.genBoolCode(labT, labF); } case ”&&”: { Stringlabx = genLabel(); left.genBoolCode(labx,labF); // som over emit2(”label”, labx); right.genBoolCode(labT, labF); // som over } case ”not”: { // Har bare ”left”-subtre left.genBoolCode(labF,labT); // Ingen kode lages!!! } case ”<”: { String temp1, temp2, temp3; // temp3 skal holde den boolsk verdi for relasjonen temp1 = left.genIntCode(); temp2 = right.genIntCode(); temp3 = genLabel(); emit4(temp3, temp1, «lt», temp2); // temp3 får (det boolske) svaret på relasjonen emit3(«jmp-false», temp3,labF); emit2(«ujp»,labT); // Denne er unødvendig dersom det som følger etter er labT // Dette kan vi oppdage med en ekstra parameter som angir labelenbak } } // den konstrusksjonen man kaller kodegenererings-metoden for. true left labT false labx true right labT false labF

  12. Oppsett for kortsluttetkode: Metoden for et sliktuttrykkblirkaltfra while-stmeller if-stm, med labler den vet detskalhoppestilved true eller false betingelse abstractclass Expression { // Hvordan skal «StringcodeGen(…)» se ut her? } classOrOpextendsExpression { StringcodeGen (StringLabT, LabF){ ... } } classAndOpextendsExpression { StringcodeGen (…){ … } } classNotOpextendsExpression { StringcodeGen (…){ … } } classLessThanOpextendsexpression{ StringcodeGen (…){ … } } Merk at disse metodene kalles «langs» pekere typet med Expression. Spørsmål: Hva må da stå i Expression-klassen?

More Related