Hovedansvarlig. Symbolgenerator. Tregenerator. Litt mer kompliserte setninger med betingelser
|
|
- Gudrun Henriksen
- 7 år siden
- Visninger:
Transkript
1 Dagens tema: Kodegenerering Listing Minila Hovedansvarlig Listeansvarlig Flok Tegngenerator Linjegenerator Symbolgenerator Flinkrepresentant Tregenerator Kodegenerator Del 0 Del 1 Del 2 Introduksjon FlinkRepresentation Enkle variable Noen enkle setninger Uttrykk Litt mer kompliserte setninger med betingelser Dag Langmyhr,Ifi,UiO: Forelesning 8. november 2005 Ark 1 av 20
2 Oversikt Formålet med kodegenereringen er å lage Flok kode som Flink maskinen kan utføre: Inndata er trerepresentasjonen av Minila programmet. Utdata er en fil med Flok kode. Eksempel Anta at vi har Minila programmet prog begprog outint(1) 1; outline; endprog Den genererte Flok filen ser slik ut: #! /store/bin/flink Dag Langmyhr,Ifi,UiO: Forelesning 8. november 2005 Ark 2 av 20
3 Genererte instruksjoner Til hjelp under uttesting (og etterpå!) finnes opsjonen I som lar kompilatoren fortelle hvilken kode den lager: 1: prog I(resVar) 0: 1 cpfrom I(resVar) 1: 1 cpto I(resVar) 2: 1 cpc I(resVar) 3: 1 xin I(resVar) 4: 1 xinc I(resVar) 5: 1 xbet 2: begprog 3: outint(1) 1; outline; 4: endprog I(Instr) 0: JMP(12) 1 0 I(fillOld) 0: 1 I(Instr) 1: SETI(20) 1 0 I(Instr) 2: OUTI(10) 1 0 I(Instr) 3: OLIN(11) 0 0 I(Instr) 4: STOP(0) 0 0 Å implementere denne opsjonen er en del av den obligatoriske oppgaven. Dag Langmyhr,Ifi,UiO: Forelesning 8. november 2005 Ark 3 av 20
4 Hvordan lage kodegenerering Det beste er å følge samme opplegg som for å skrive ut programkoden i del 1: Legg en metode inn i alle klasser som representerer en bit av Minila programmet: class WhileSent {. void analyze (DeclSeqv ds) {.... void makecode () {... Dag Langmyhr,Ifi,UiO: Forelesning 8. november 2005 Ark 4 av 20
5 class FlinkRepresentation Man kan skrive kodefilen direkte, men det er enklere (i hvert fall tankemessig) å plassere koden rett inn i en slags Flink maskin: class FlinkRepresentation { private String flokfile; private int[] func, adr, corr, istore; private void makeinst (int f, int a, int c) { listresp.testinstout(nextinst, instname, f, a, c); if (nextinst > maxinst) mainresp.error("instruksjonslageret er fullt" ); func[nextinst] = f; adr[nextinst] = a; corr[nextinst] = c; nextinst++;. public void makeflokfile () {... Så kan kodefilen skrives ut til slutt. Dag Langmyhr,Ifi,UiO: Forelesning 8. november 2005 Ark 5 av 20
6 Variable Det må settes av plass i heltallsminnet til alle enkle variable. Dette løses enkelt med en metode i FlinkRepresentation: class FlinkRepresentation { private int nextint=0, maxint=1000; private int[] istore = new int[maxint]; int resvar (String name) { // Denne reserverer 1 celle i heltallslageret, ved å // øke nextint. Returnér adressen til cellen. // (Parameteren name er bare med // for I testutskriften.) listresp.testresvarout(nextint, 1, name); ++nextint; if (nextint > maxint) mainresp.error("heltallslageret er fullt"); return nextint 1;. Dette fungerer for Minila; de fleste andre programmeringsspråk trenger mer kompliserte opplegg. Array er er tema neste uke. Dag Langmyhr,Ifi,UiO: Forelesning 8. november 2005 Ark 6 av 20
7 Setninger På tilsvarende måte lager vi metoder for å legge de ulike instruksjonene i instruksjonslagrene: class FlinkRepresentation { private int nextinst=0, maxinst=1000; private int[] func, adr, corr; private void makeinst (String instname, int f, int a, int c) { listresp.testinstout(nextinst, instname, f, a, c); if (nextinst > maxinst) mainresp.error("instruksjonslageret er fullt" ); func[nextinst] = f; adr[nextinst] = a; corr[nextinst] = c; nextinst++;. public void makeoutc (int a, int c) { makeinst("outc", 28, a, c);. Dag Langmyhr,Ifi,UiO: Forelesning 8. november 2005 Ark 7 av 20
8 Setningen outchar Da har vi apparatet for å lage kode for enkle setninger som outchar. Kodeskjemaer for alle setningene finnes i kompendiet. Minila Flink kode outchar uttrykk Beregn uttrykk class OutCharSent { private Expression expr; OUTC void analyze (DeclSeqv ds) {... void makecode () { listresp.testkout("inn", "OutCharSent"); expr.makecode(); flinkrepr.makeoutc(0, 0); listresp.testkout("ut", "OutCharSent"); Dag Langmyhr,Ifi,UiO: Forelesning 8. november 2005 Ark 8 av 20
9 Testutskrift K På samme måte som A var nyttig til å finne feil under analysen, trenger vi en opsjon K som forteller hvilke metoder kodegeneratoren er innom: 1: prog 2: begprog 3: outint(1) 1; outline; 4: endprog K: INN Program K: INN DeclSeqv K: UT DeclSeqv K: INN SentSeqv K: INN OutIntSent K: INN Expression K: INN ConstPart K: UT ConstPart K: UT Expression K: UT OutIntSent K: INN OutLineSent K: UT OutLineSent K: UT SentSeqv K: UT Program Dag Langmyhr,Ifi,UiO: Forelesning 8. november 2005 Ark 9 av 20
10 Uttrykk Hvordan lager vi kode for et uttrykk som i a := 4 * a 17? Første operand Det er ganske enkelt å lage kode som legger en konstant eller en variabel i I registeret: Minila Flink kode tallkonstant SETI Konstantens verdi tegn SETI Tegnets verdi enkel variabel LDI Variabelens adresse Dag Langmyhr,Ifi,UiO: Forelesning 8. november 2005 Ark 10 av 20
11 Resten av uttrykket Resten av uttrykket består av 0 eller flere par (operator,konstant/variabel) som vi kan ta etter tur. Minila arop enkel variabel Flink kode arop I variabelens adresse arop konstant adr INTG konstantens verdi arop I adr (Legg merke til at konstanter må ligge i minnet.) Dag Langmyhr,Ifi,UiO: Forelesning 8. november 2005 Ark 11 av 20
12 1: prog I(resVar) 0: 1 cpfrom I(resVar) 1: 1 cpto I(resVar) 2: 1 cpc I(resVar) 3: 1 xin I(resVar) 4: 1 xinc I(resVar) 5: 1 xbet 2: var a; 3: begprog 4: a := 3; 5: a := 4 * a 17; 6: outint(1) a; 7: endprog I(Instr) 0: JMP(12) 1 0 I(resVar) 6: 1 a I(fillOld) 0: 1 I(Instr) 1: SETI(20) 3 0 I(Instr) 2: STI(2) 6 0 I(Instr) 3: SETI(20) 4 0 I(Instr) 4: MULI(7) 6 0 I(resConst) 7: 17 I(Instr) 5: SUBI(6) 7 0 I(Instr) 6: STI(2) 6 0 I(Instr) 7: LDI(1) 6 0 I(Instr) 8: OUTI(10) 1 0 I(Instr) 9: STOP(0) 0 0 Dag Langmyhr,Ifi,UiO: Forelesning 8. november 2005 Ark 12 av 20
13 #! /store/bin/flink Dag Langmyhr,Ifi,UiO: Forelesning 8. november 2005 Ark 13 av 20
14 Setninger Noen setninger er litt mer kompliserte å generere kode for. While setningen Minila koden i := 10; while i <> 0 do v := v + i; i := i 1; endwhile; skal generere denne koden: I(Instr) 1: SETI(20) 10 0 I(Instr) 2: STI(2) 6 0 I(Instr) 3: LDI(1) 6 0 I(Instr) 4: STI(2) 5 0 I(Instr) 5: SETI(20) 0 0 I(Instr) 6: SUBI(6) 5 0 I(Instr) 7: JEQI(16) 1 0 I(Instr) 8: LDI(1) 7 0 I(Instr) 9: ADDI(5) 6 0 I(Instr) 10: STI(2) 7 0 I(Instr) 11: LDI(1) 6 0 I(resConst) 8: 1 I(Instr) 12: SUBI(6) 8 0 I(Instr) 13: STI(2) 6 0 I(Instr) 14: JMP(12) 3 0 Dag Langmyhr,Ifi,UiO: Forelesning 8. november 2005 Ark 14 av 20
15 Hoppadresser Koden inneholder to hopp: Minila Flink kode while betingelse do xw Som angitt J xrel I xew. oversettes som vanlig endwhile xew.. JMP xw Hopp til kjent adresse Den siste hoppet er greit nok: Bare husk adressen (dvs indeksen i istore) da man begynte å lage kode for setningen. Dag Langmyhr,Ifi,UiO: Forelesning 8. november 2005 Ark 15 av 20
16 Hopp til ukjent adresse Hva med det første hoppet? Når koden skal lages, vet vi ikke hvor langt vi skal hoppe. Løsningen er: ❶ Generér en hoppinstruksjon til adresse 1. (Husk også adressen til denne instruksjonen.) ❷ Når vi en stund senere vet den riktige adressen, kan vi sette inn denne i stedet. class FlinkRepresentation { private int[] func, adr, corr;. void filloldadr (int instnr, int newadr) { // Fyll instruksjon instnr med adresse newadr listresp.testfilloldadrout(instnr, newadr); adr[instnr] = newadr; Dag Langmyhr,Ifi,UiO: Forelesning 8. november 2005 Ark 16 av 20
17 Hele koden Da har vi hele koden for While setningen: void makecode () { listresp.testkout("inn", "WhileSent"); int whilestart = flinkrepr.nextinstadr(); cond.makecode(); int falsecond = flinkrepr.nextinstadr() 1; SS.makeCode(); flinkrepr.makejmp(whilestart,0); flinkrepr.filloldadr(falsecond, flinkrepr.nextinstadr()); listresp.testkout("ut", "WhileSent"); Dag Langmyhr,Ifi,UiO: Forelesning 8. november 2005 Ark 17 av 20
18 Betingelser Hvordan skal vi lage kode for en betingelse som while a*2 > b+1 do? Det er i grunnen bare én måte å gjøre det på: ❶ Beregn uttrykket til venstre for relasjonen. ❷ Beregn uttrykket til høyre. ❸ Trekk det venstre uttrykket fra det høyre. ❹ Lag et betinget hopp (som sjekker I registeret mot 0). Dag Langmyhr,Ifi,UiO: Forelesning 8. november 2005 Ark 18 av 20
19 Mellomlagring Når vi har beregnet den venstre verdien, må vi lagre den et sted mens vi beregner den høyre. Ingen registre er ledige, så vi må sette av en lokasjon xbet et fast sted i minnet. Valg av hoppinstruksjon Litt tankearbeid gir oss denne tabellen for hvilke instruksjoner vi skal lage: xrel = =/=,<> < <= > >= J xrel I JNEI JEQI JLEI JLTI JGEI JGTI Dag Langmyhr,Ifi,UiO: Forelesning 8. november 2005 Ark 19 av 20
20 1: prog I(resVar) 0: 1 cpfrom I(resVar) 1: 1 cpto I(resVar) 2: 1 cpc I(resVar) 3: 1 xin I(resVar) 4: 1 xinc I(resVar) 5: 1 xbet 2: var a, b; 3: begprog 4: a := 10; 5: b := 7; 6: while a*2 > b+1 do 7: a := a 1; 8: endwhile; 9: endprog I(Instr) 0: JMP(12) 1 0 I(resVar) 6: 1 a I(resVar) 7: 1 b I(fillOld) 0: 1 I(Instr) 1: SETI(20) 10 0 I(Instr) 2: STI(2) 6 0 I(Instr) 3: SETI(20) 7 0 I(Instr) 4: STI(2) 7 0 I(Instr) 5: LDI(1) 6 0 I(resConst) 8: 2 I(Instr) 6: MULI(7) 8 0 I(Instr) 7: STI(2) 5 0 I(Instr) 8: LDI(1) 7 0 I(resConst) 9: 1 I(Instr) 9: ADDI(5) 9 0 I(Instr) 10: SUBI(6) 5 0 I(Instr) 11: JGEI(19) 1 0 I(Instr) 12: LDI(1) 6 0 I(resConst) 10: 1 I(Instr) 13: SUBI(6) 10 0 I(Instr) 14: STI(2) 6 0 I(Instr) 15: JMP(12) 5 0 I(fillOld) 11: 16 I(Instr) 16: STOP(0) 0 0 Dag Langmyhr,Ifi,UiO: Forelesning 8. november 2005 Ark 20 av 20
Hvordan skrive Flok og Flass kode? I mange tilfelle er det svært enkelt:
Hvordan skrive Flok og Flass kode? I mange tilfelle er det svært enkelt: inchar INC inint INI Tegnet eller tallverdien kommer i I registeret. outchar OUTC outint (n) OUTI n outline OLIN I Flink maskinen
DetaljerDagens tema: INF2100. Utvidelser av Minila array-er. tegn og tekster. Flass- og Flokkode. prosedyrer. Prosjektet struktur. feilhåndtering.
Dagens tema: Utvidelser av Minila array-er tegn og tekster Flass- og Flokkode array-er prosedyrer Prosjektet struktur feilhåndtering del 0 Dag Langmyhr,Ifi,UiO: Forelesning 6. september 2005 Ark 1 av 19
DetaljerHva er kompilering? Dagens tema. En kompilator En kompilator leser Minila koden og lager Flok koden.
Dagens tema Dagens tema Kildekode Hva er kompilering? Anta at vi lager dette lille programmet (kalt kildekoden): Hva er kompilering? Hvordan analysere et program? Hvordan programmere dette i Java? Hvordan
DetaljerINF okt. 2004
INF 2100 20. okt. 2004 Dette er siste forelesning. Dagens tema: Diverse om kode-generering: Litt om uttrykk, betingelser og while-setninger Prosedyrer og kall Gruppene ukene fremover: Ukene fra 25. okt.
DetaljerINF2100. Dagens tema: Flink-maskinen Litt datamaskinhistorie. Registre og lagre. Instruksjoner. Flass-koden
Dagens tema: Flink-maskinen Litt datamaskinhistorie Registre og lagre Instruksjoner Flass-koden Dag Langmyhr,Ifi,UiO: Forelesning 30. august 2005 Ark 1 av 20 Datamaskinenes historie Menneskene har alltid
DetaljerDagens tema: INF2100. Syntaksanalyse. Hva annet gjør en kompilator? Sjekking av navnebruk. Testutskrifter
Dagens tema: Syntaksanalyse Hva annet gjør en kompilator? Sjekking av navnebruk Testutskrifter Dag Langmyhr,Ifi,UiO: Forelesning 4. oktober 2005 Ark 1 av 20 Syntaksanalyse På skolen hadde vi grammatikkanalyse:
DetaljerISO Dagens tema. Tegn. Uttrykk. I Minila lagres kun heltall, men de kan tolkes som tegn. Det siste om Minila.
April 1995, DFL, Ifi/UiO Dagens tema Dagens tema Det siste om Minila og tekster Flink maskinen Litt datamaskinhistorie Registre og lagre Instruksjoner Flok kode Flass kode I Minila lagres kun heltall,
DetaljerDagens tema: 12 gode råd for en kompilatorskriver
Dagens tema: 12 gode råd for en kompilatorskriver Hvordan sjekke navn? Testutskrifter 12 gode råd Hva skal gjøres med navn? Sjekking av navn En kompilator må også sjekke riktig navnebruk: Det må ikke forekomme
DetaljerDatamaskinenes historie Menneskene har alltid prøvd å lage maskiner for å løse sine problemer.
Datamaskinenes historie Menneskene har alltid prøvd å lage maskiner for å løse sine problemer Charles Babbage Midt på 1800-tallet var problemet tabeller med feil Dagens tema: Flink-maskinen Litt datamaskinhistorie
DetaljerVelkommen til INF2100
Kursopplegg Velkommen til INF2100 Jeg er Dag Langmyhr (dag@ifi.uio.no). Dagens tema: Hva går kurset ut på? Bakgrunn for kurset Hvordan gjennomføres kurset? Hvordan får man det godkjent? Pause (med registrering
DetaljerSyntaksanalyse. Dagens tema: Språkdiagrammene Jernbanediagrammene er et ypperlig utgangspunkt for å analysere et program: INF2100 INF2100 INF2100
Syntaksanalyse På skolen hadde vi grammatikkanalyse: Dagens tema: Syntaksanalyse Hva annet gjør en kompilator? Sjekking av navnebruk Testutskrifter Fanger krabber så lenge de orker Syntaksanalyse er på
DetaljerOversikt Kodegenerering Variable Setninger Uttrykk While-setningen Oppsummering
Dagens tema Dagens tema: Kodegenerering Introduksjon Enkle variable Uttrykk Tilordning Litt mer kompliserte setninger med betingelser (Alt om kodegenerering unntatt funksjoner og array-er.) Prosjektoversikt
DetaljerINF Repetisjon: Hvordan bygge treet og analysere? 8. september Typisk situasjon. De problematiske syntaks-diagrammene
Dagens tema: INF 2100 8. september 2004 Mer om strukturen i treet og hvordan bygge det Testing av at navn er deklarert og brukt riktig Arbeid i gruppene neste uke: Oppgaver relevant for dette stadiet i
DetaljerINF Enkel historikk over modul-utvikling. Ønsker til en god oppdeling. Program-arkitektur: Hvordan dele opp i moduler/komponenter?
INF 2100 6. oktober 2004 Program-arkitektur: Hvordan dele opp i moduler/komponenter? Dagens temaer: Litt om modularisering av programmer (program-arkitektur) Om organiseringen av Del 2 Neste uke: Verken
DetaljerOversikt Kodegenerering Variable Setninger Uttrykk While-setningen
Dagens tema Dagens tema: Kodegenerering Introduksjon Enkle variable Uttrykk Tilordning Litt mer kompliserte setninger med betingelser (Alt om kodegenerering unntatt funksjoner.) Prosjektoversikt Del-0
DetaljerRåd nr 1: Start nå! Det tar typisk timer å programmere Del 1 om man ikke har gjort slikt før. Dagens tema:
Dagens tema: 12 gode råd når man rammerer en kompilator Råd nr 1: Start nå! Det tar typisk 10 50 timer å rammere Del 1 om man ikke har gjort slikt før. Hvor mange timer per dag blir det? Dag Langmyhr,Ifi,UiO:
DetaljerBakgrunnen for INF2100. Velkommen til INF2100. Prosjektet. Hva gjør en kompilator?
Kursopplegg Velkommen til INF2100 Bakgrunnen Bakgrunnen for INF2100 Jeg er Dag Langmyhr (dag@ifi.uio.no). Dagens tema: Hva går kurset ut på? Bakgrunn for kurset Hvordan gjennomføres kurset? Hvordan får
DetaljerDagens tema: 12 gode råd for en kompilatorskriver. Sjekking av navn. Lagring av navn. Hvordan finne et navn?
Dagens tema: 12 gode råd for en kompilatorskriver Hva skal gjøres med navn? Sjekking av navn Hvordan sjekke navn? Testutskrifter 12 gode råd En kompilator må også sjekke riktig navnebruk: Det må ikke forekomme
DetaljerVelkommen til INF2100 Jeg er Dag Langmyhr
Velkommen til Jeg er Dag Langmyhr (dag@ifi.uio.no). Bakgrunn for I INF1000 20 har dere lært å rammere, men bare små rammer (< 1000 linjer). Hensikten med er å gi mer rammeringstrening Dagens tema: Hva
DetaljerOversikt Kodegenerering Variabler Setninger Uttrykk While-setningen
Dagens tema Dagens tema: Kodegenerering Introduksjon Enkle variabler Uttrykk Tilordning Litt mer kompliserte setninger med betingelser (Alt om kodegenerering unntatt funksjoner.) Prosjektoversikt Del 0
DetaljerDagens tema: Formålet. Kodegenerering NB! Introduksjon Modulen Code. Enkle variable Noen enkle setninger Uttrykk
ng Dagens tema Prosjektoversikt Dagens tema: Del-0 Del-1 Del-2 Kodegenerering frusc Rusc frask Introduksjon Modulen Code Char- Generator Scanner Syntax Code Enkle variable Noen enkle setninger Error Log
DetaljerDagens tema: Formålet. Kodegenerering NB! Introduksjon Modulen Code. Enkle variable Noen enkle setninger Uttrykk
Dagens tema Prosjektoversikt Dagens tema: Del-0 Del-1 Del-2 Kodegenerering frusc Rusc frask Introduksjon Modulen Code Char- Generator Scanner Syntax Code Enkle variable Noen enkle setninger Error Log Litt
DetaljerOversikt Kodegenerering Variable Setninger Uttrykk While-setningen
Dagens tema Dagens tema: Kodegenerering Introduksjon Enkle variable Uttrykk Tilordning Litt mer kompliserte setninger med betingelser (Alt om kodegenerering unntatt funksjoner.) Prosjektoversikt Del-0
DetaljerOversikt Kodegenerering Variable Setninger Uttrykk While-setningen
Dagens tema Dagens tema: Kodegenerering Introduksjon Enkle variable Uttrykk Tilordning Litt mer kompliserte setninger med betingelser (Alt om kodegenerering unntatt funksjoner.) Prosjektoversikt Del 0
Detaljer13.09.2012 LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke 1-3 12. September 2012 Siri Moe Jensen EKSEMPLER
.9.22 LITT OM OPPLEGGET INF EKSTRATILBUD Stoff fra uke - 2. September 22 Siri Moe Jensen Målgruppe: De som mangler forståelse for konseptene gjennomgått så langt. Trening får du ved å jobbe med oppgaver,
DetaljerOversikt Oversettelse Logging Implementasjon Oppsummering
Dagens tema Dagens tema: Kodegenerering Introduksjon Modulen Code Enkle variable Noen enkle setninger Uttrykk Litt mer kompliserte setninger med betingelser (Alt unntatt program, funksjoner og array-er.)
DetaljerKodegenerering del 3: Tilleggsnotat fra AHU Samt litt om class-filer og byte-kode INF5110 V2007. Stein Krogdahl, Ifi UiO
Kodegenerering del 3: Tilleggsnotat fra AHU Samt litt om class-filer og byte-kode INF5110 V2007 Stein Krogdahl, Ifi UiO ASU, kap 9.5: Vi generer kode for én og én basal blokk Da er det lett å holde orden
DetaljerINF april, 2015 Stein Krogdahl Ifi, UiO. Svar på oppgaver til kap. 8. Ble lagt ut 24. april
INF5110 28. april, 2015 Stein Krogdahl Ifi, UiO Svar på oppgaver til kap. 8 Ble lagt ut 24. april 1 SVAR: Oppgave 8.1.c (fra boka) Lag for hånd TA-kode for følgende uttrykk: a * b + a * b * c Du skal ikke
DetaljerUNIVERSITETET I OSLO
UNIVERSITETET I OSLO BOKMÅL Det matematisk-naturvitenskapelige fakultet Eksamen i : Eksamensdag : Torsdag 2. desember 2004 Tid for eksamen : 09.00 12.00 Oppgavesettet er på : Vedlegg : Tillatte hjelpemidler
DetaljerDagens tema: Maskinkode. Litt datamaskinhistorie Hva er maskin- og assemblerkode? x86-prosessoren Programkode og variabler
Dagens tema Dagens tema: Maskinkode Litt datamaskinhistorie Hva er maskin- og assemblerkode? x86-prosessoren Programkode og variabler Charles Babbage Datamaskinenes historie Menneskene har alltid prøvd
DetaljerINF april, 2014 Stein Krogdahl Ifi, UiO. Svar på oppgaver til kap. 8
INF5110 25. april, 2014 Stein Krogdahl Ifi, UiO Svar på oppgaver til kap. 8 som ble lagt ut 24. april Feil bes rapportert til: «steinkr@ifi.uio.no» 1 SVAR: Oppgave 8.1.c (fra boka) Lag for hånd TA-kode
DetaljerObligatorisk Innlevering 2
Obligatorisk Innlevering 2 INF5110 - Kompilatorteknikk Våren 2017 Frist 07.05.2017 23:59 Dette er den andre av to oppgaver våren 2017. Den bygger videre på det som er gjort i den første innleveringen.
DetaljerHva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }
Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; Hva skrives ut på skjermen når følgende kode utføres? int [] tallene =
DetaljerLitt om Javas class-filer og byte-kode
Litt om Javas class-filer og byte-kode INF 5110, 11/5-2010, Stein Krogdahl (Dessverre litt få figurer) Disse formatene ble planlagt fra start som en del av hele Java-ideen Bt Byte-koden gir portabilitet
DetaljerGjennomgang prøveeksamen oppgave 1, 2, 4, 5, 7
Gjennomgang prøveeksamen 2014 oppgave 1, 2, 4, 5, 7 1a: Hva er verdien til tall etter at følgende kode er utført: 17 int tall = 5; tall = (tall*3) + 2; 5 15 17 1b: Anta at følgende programsetninger utføres.
DetaljerEn oppsummering (og litt som står igjen)
En oppsummering (og litt som står igjen) Pensumoversikt Hovedtanker i kurset Selvmodifiserende kode Overflyt Eksamen En oppsummering Oppsummering Pensum læreboken til og med kapittel 7 forelesningene de
DetaljerDagens tema: Mer av det dere trenger til del 1
Dagens tema Dagens tema: Mer av det dere trenger til del 1 Hvilke klasser trenger vi? Uttrykk Typer Testutskrifter 12 gode råd Dagens tema Prosjektet Utifra dette AlboC-programmet: int pot2 (int x) { int
DetaljerINF5110 Obligatorisk Oppgave 2 del 2. Andreas Svendsen SINTEF. 23. April Oversikt
INF5110 Obligatorisk Oppgave 2 del 2 Andreas Svendsen SINTEF 23. April 2009 Oversikt Tilbakeblikk på oppgaven Eksempel på sjekk av semantikk Eksempel på kodegenerering Nødvendige instruksjoner for IF-noden
DetaljerUNIVERSITETET I OSLO
Side 1 UNIVERSITETET I OSLO Kandidatnr Det matematisk-naturvitenskapelige fakultet Eksamen i: PRØVEEKSAMEN INF1000 Eksamensdag: Prøveeksamen 22.11.2011 Tid for eksamen: 12:15-16:15 Oppgavesettet er på
DetaljerDagens tema. Hva er kompilering? Anta at vi lager dette lille programmet doble.rusc (kalt kildekoden): Hva er kompilering?
Dagens tema Dagens tema Kildekode Hva er kompilering? Hva er kompilering? Hvordan foreta syntaksanalyse av et program? Hvordan programmere dette i Java? Hvordan oppdage feil? Anta at vi lager dette lille
DetaljerOppgaver til kodegenerering etc. INF-5110, 16. mai, 2014
Oppgaver til kodegenerering etc. INF-5110, 16. mai, 2014 Oppgave 1: Vi skal se på koden generert av TA-instruksjonene til høyre i figur 9.10 i det utdelte notatet, side 539 a) Se på detaljene i hvorfor
DetaljerKompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering
Dagens tema Hva er kompilering? Hvordan foreta syntaksanalyse av et program? Hvordan programmere dette i Java? Statiske metoder og variabler Hvordan oppdage feil? Kildekode Hva er kompilering? Anta at
DetaljerOversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program
Oversikt INF1000 Uke 1 time 2 Variable, enkle datatyper og tilordning Litt repetisjon Datamaskinen Programmeringsspråk Kompilering og kjøring av programmer Variabler, deklarasjoner og typer Tilordning
DetaljerDagens tema. Hva er kompilering? Anta at vi lager dette lille programmet (kalt kildekoden): Hva er kompilering?
Dagens tema Dagens tema Kildekode Hva er kompilering? Anta at vi lager dette lille programmet (kalt kildekoden): Hva er kompilering? Hvordan foreta syntaksanalyse av et program? Hvordan programmere dette
DetaljerHvordan en prosessor arbeider, del 1
Hvordan en prosessor arbeider, del 1 Læringsmål Kompilator, interpret og maskinkode CPU, registre Enkle instruksjoner: de fire regnearter Mer informasjon om temaet Internett Lokalnett (LAN) Mitt program
DetaljerRepetisjon: 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.6,.7) Repetisjon Språk med rekursjon (C3) og blokker (C4) Statisk link Dynamisk allokering (C5) Parameteroverføring 1/5 Repetisjon: Statiske språk uten rekursive
DetaljerDagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)
Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7) Repetisjon Språk med rekursjon (C3) og blokker (C4) Statisk link Dynamisk allokering (C5) Parameteroverføring 1/25 Forelesning 11 5.11.2003 Repetisjon:
DetaljerDagens tema: Sjekking
Dagens tema Dagens tema: Sjekking Navnebinding (obligatorisk oppgave 3) Biblioteket Logging Riktig bruk av navn (frivillig) Typesjekking (frivillig) Hele prosjektet Strukturen til kompilatoren vår f.pas
DetaljerNorsk informatikkolympiade runde
Norsk informatikkolympiade 2017 2018 1. runde Sponset av Uke 46, 2017 Tid: 90 minutter Tillatte hjelpemidler: Kun skrivesaker. Det er ikke tillatt med kalkulator eller trykte eller håndskrevne hjelpemidler.
DetaljerDagens tema: 12 gode råd for en kompilatorskriver. Prosjektet. Koblingen mellom grammatikken og klasser. Utifra dette RusC-programmet:
Dagens tema Dagens tema: 12 gode råd for en kompilatorskriver Hvordan sjekke navn? Testutskrifter Programmeringsstil 12 gode råd Dagens tema Prosjektet Utifra dette RusC-programmet: int pot2 (int x) int
DetaljerOppsummering Assemblerkode Hopp Multiplikasjon Kode og data Array Oppsummering
Uke 34 Uke 35 Uke 36 Uke 37 Uke 38 Uke 39 Uke 40 Uke 41 Uke 42 Uke 43 Uke 44 Uke 45 Uke 46 Uke 47 sikkerhet datanett programvare digitale kretser Prosessoren II Kort oppsummering Løkker og tester Mer om
DetaljerOppbygningen av en datamaskin Det viktigste i en moderne datamaskin er hovedkortet («motherboard»):
Oppbygningen av en datamaskin Det viktigste i en moderne datamaskin er hovedkortet («motherboard»): Grovt sett inneholder det En prosessor Minne (for både program og data) Klokke Kontrollere for periferutstyr.
DetaljerDel 4 Noen spesielle C-elementer
Del 4 Noen spesielle C-elementer 1 RR 2016 Header-filer inneholder Prototypene til funksjonene i standard biblioteket Verdier og definisjoner som disse funksjonene bruker #include #include
DetaljerNOTAT (pensum!) Javas klasse-filer, byte-kode og utførelse. INF 5110, 10/5-2011, Stein Krogdahl
NOTAT (pensum!) Javas klasse-filer, byte-kode og utførelse Dessverre litt få figurer INF 5110, 10/5-2011, Stein Krogdahl Oversikt over Javas class-filer og byte-kode Disse formatene ble planlagt fra start
DetaljerPensum Hovedtanker Selvmodifiserende Overflyt Veien videre Eksamen. Oppsummering
Oppsummering Pensum Grovt sett er alt fra forelesningene og øvingsoppgavene pensum. Detaljert oversikt finnes på kurssidene. Hovedtanker fra kurset Litt om eksamen Hvorfor har dere lært dette? Ikke mange
DetaljerOppgaver til kodegenerering etc. INF-5110, 12. mai, 2015
Oppgaver til kodegenerering etc. INF-5110, 12. mai, 2015 Oppgave 1: Vi skal se på koden generert av TA-instruksjonene til høyre i figur 9.10 i det utdelte notatet, side 539 a) (repetisjon fra forelesningene)
DetaljerINF1000 : Forelesning 4
INF1000 : Forelesning 4 Kort repetisjon av doble (nestede) løkker Mer om 1D-arrayer Introduksjon til 2D-arrayer Metoder Ole Christian Lingjærde Biomedisinsk forskningsgruppe Institutt for informatikk Universitetet
DetaljerINF1000 - Uke 10. Ukesoppgaver 10 24. oktober 2012
INF1000 - Uke 10 Ukesoppgaver 10 24. oktober 2012 Vanlige ukesoppgaver De første 4 oppgavene (Oppgave 1-4) handler om HashMap og bør absolutt gjøres før du starter på Oblig 4. Deretter er det en del repetisjonsoppgaver
DetaljerINF 1000 høsten 2011 Uke september
INF 1000 høsten 2011 Uke 2 30. september Grunnkurs i Objektorientert Programmering Institutt for Informatikk Universitetet i Oslo Siri Moe Jensen og Arne Maus 1 INF1000 undervisningen Forelesningene: Første
Detaljeri=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
Repetisjon: nesting av løkker Kort repetisjon av doble (nestede) løkker Mer om D-arrayer Introduksjon til D-arrayer Metoder Ole Christian Lingjærde Biomedisinsk forskningsgruppe Institutt for informatikk
DetaljerEivind Gard Lund. 24. Mars 2009 Foilene bygger på 2009 utgaven av Andreas Svendsen
Eivind Gard Lund 24. Mars 2009 Foilene bygger på 2009 utgaven av Andreas Svendsen Informasjon Semantikksjekk Kodegenerering Oblig 2 tilgjengelig på kurssiden Bygger på deres oblig 1 kode. Det er lagt ut
DetaljerDagens tema: Generelt om variable. Kodegenerering. Deklarasjon av array er. Versjonskontroll. Oppslag i array er
Dagens tema Dagens tema: Kodegenerering og kall Hovedprogrammet Noen siste gode råd Versjonskontroll CVS og Deklarasjon av array er Når programmet deklarerer en array, må kompilatoren vår sette av plass
DetaljerDen siste dagen. Pensumoversikt Hovedtanker i kurset Selvmodifiserende kode Overflyt Veien videre... Eksamen
Den siste dagen Pensumoversikt Hovedtanker i kurset Selvmodifiserende kode Overflyt Veien videre... Eksamen En oppsummering Oppsummering Pensum Læreboken til og med kapittel 7, kompendiet, forelesningene
DetaljerINF1000 undervisningen INF 1000 høsten 2011 Uke september
INF1000 undervisningen INF 1000 høsten 2011 Uke 2 30. september Grunnkurs i Objektorientert Programmering Institutt for Informatikk Universitetet i Oslo Siri Moe Jensen og Arne Maus Forelesningene: Første
Detaljer2 Parser. 1 Skanner. 4 Kodegenerator. 3 Sjekker. Oversikt Datamaskinhistorie x86 Kodegenerering Setninger Uttrykk.
Dagens tema Dagens tema: Maskinkode del 1 Litt datamaskinhistorie Hva er maskin- og assemblerkode? x86-prosessoren Programkode for setninger Konstanter og uttrykk Prosjektoversikt f.pas f.s 1 Skanner :Token
DetaljerEKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00
EKSAMEN Emnekode: ITF20006 Emne: Algoritmer og datastrukturer Dato: 9. mai 2016 Eksamenstid: 09:00 13:00 Hjelpemidler: Alle trykte og skrevne Faglærer: Jan Høiberg Om eksamensoppgavene: Oppgavesettet består
DetaljerDel 1 En oversikt over C-programmering
Del 1 En oversikt over C-programmering 1 RR 2016 Starten C ble utviklet mellom 1969 og 1973 for å re-implementere Unix operativsystemet. Er et strukturert programmeringsspråk, hvor program bygges opp av
DetaljerDagens tema INF2270. Cs preprosessor. Separat kompilering av C funksjoner. C og minnet. Dag Langmyhr,Ifi,UiO: Forelesning 5. februar 2007 Ark 1 av 15
Dagens tema Cs preprosessor Separat kompilering av C funksjoner C og minnet Dag Langmyhr,Ifi,UiO: Forelesning 5. februar 2007 Ark 1 av 15 Cs preprosessor Før selve kompileringen går C kompilatoren gjennom
Detaljeri=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 Repetisjon: arrayer Tema: Løkker Arrayer Metoder Ole Christian Lingjærde,. september Deklarere og opprette array - eksempler: int[] a = new int[]; String[] a = new String[]; I
DetaljerForelesning inf Java 4
Forelesning inf1000 - Java 4 Tema: Løkker Arrayer Metoder Ole Christian Lingjærde, 12. september 2012 Ole Chr. Lingjærde Institutt for informatikk, 29. august 2012 1 Repetisjon: arrayer Deklarere og opprette
DetaljerNOTAT (pensum!) Javas klasse-filer, byte-kode og utførelse
NOTAT (pensum!) Javas klasse-filer, byte-kode og utførelse Dessverre litt få figurer INF 5110, 8/5-2012, Stein Krogdahl Byte-koden for Java og.nett (C#) http://en.wikipedia.org/wiki/java_bytecode_instruction_listings
DetaljerLøsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF1000 - Høst 2011)
Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF1000 - Høst 2011) Løsningsforslag til oppgave 7, 8, og 9 mangler Klasser og objekter (kap. 8.1-8.14 i "Rett på Java" 3. utg.) NB! Legg merke til at disse
DetaljerINF225 høsten 2003 Prosjekt del 4: kodegenerering
INF225 høsten 2003 Prosjekt del 4: kodegenerering Thomas Ågotnes 19. november 2003 1 Introduksjon I denne delen av prosjektet skal C- -parseren fra del 3 utvides til å generere maskinkode. Maskinkoden
DetaljerINF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen
INF1000 EKSTRATILBUD Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen PLAN FOR DAGEN gjennomgå stoff fra uke 1-5(6), men med en litt annen tilnærming kun gjennomgått stoff, men vekt på konsepter og
DetaljerUNIVERSITETET I OSLO
UNIVERSITETET I OSLO BOKMÅL Det matematisk-naturvitenskapelige fakultet Kontinuasjonseksamen i : Eksamensdag : INF1000 Grunnkurs i objektorientert programmering Fredag 7. januar Tid for eksamen : 09.00
DetaljerJavas klasse-filer, byte-kode og utførelse (og litt om C# sin CIL-kode)
Javas klasse-filer, byte-kode og utførelse (og litt om C# sin CIL-kode) Disse foilene er pensum INF 5110, 30/4-2013, Stein Krogdahl Byte-koden for Java og.nett (C#) kan leses her: http://en.wikipedia.org/wiki/java_bytecode_instruction_listings
DetaljerEnkle generiske klasser i Java
Enkle generiske klasser i Java Oslo, 7/1-13 Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Del 1: Enkle pekere Før vi tar fatt på det som er nytt i dette notatet, skal vi repetere litt
DetaljerINF1000: noen avsluttende ord
Pensum Det som er gjennomgått på forelesningene INF1000: noen avsluttende ord Arne og Fredrik Stoff som er behandlet i oppgaver/obliger Notat om Informasjonsteknologi, vitenskap og samfunnsmessige virkninger
Detaljer2 Om statiske variable/konstanter og statiske metoder.
Litt om datastrukturer i Java Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo 1 Innledning Dette notatet beskriver noe av det som foregår i primærlageret når et Javaprogram utføres.
DetaljerOversikt Deklarasjoner Typesjekk Programmering Datamaskinhistorie x86 Kodegenerering
Dagens tema Dagens tema: Semantisk sjekking Hvordan finne deklarasjoner? Typesjekking Hvordan programmere sjekking av riktig navnebruk? Maskinkode Litt datamaskinhistorie Hva er maskin- og assemblerkode?
DetaljerDagens tema: 12 gode råd for en kompilatorskriver. Prosjektet. Modifikasjon av grammatikken. Utifra dette RusC programmet:
Dagens tema Dagens tema: 12 gode råd for en kompilatorskriver Hvordan sjekke navn? Testutskrifter Programmeringsstil 12 gode råd Dagens tema Prosjektet Utifra dette RusC programmet: func pot2 (int x) int
Detaljerpublic static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren
Prosedyrer Hensikten med en prosedyre Hensikten med en prosedyre er, logisk sett, å representere en jobb eller en funksjonalitet i et eller flere programmer. Bruk av entall er viktig: vi har generelt en
DetaljerMER OM ARRAYER. INF1000: Forelesning 4. Anta at vi ønsker å lagre en liste med navnene på alle INF1000-studentene:
INF1000: Forelesning 4 Mer om arrayer Metoder MER OM ARRAYER 2 Array som en samling verdier Anta at vi ønsker å lagre en liste med navnene på alle INF1000-studentene: String[] studenter = new String[500];
DetaljerIN 147 Program og maskinvare
Dagens tema Mer om C Cs preprosessor Allokering av variable Separat kompilering Programmet make Pekere i C Operasjoner på pekere Pekere og vektorer Referanseparametre Pekere til «alt» og «ingenting» Dynamisk
DetaljerKort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon
Kort om meg INF1000 Uke 2 Variable, enkle datatyper og tilordning Fredrik Sørensen Kontor: Rom 4311-NR, Informatikkbygget Brukernavn/e-post: fredrso@ifi.uio.no Utdanning: Dataingeniør, 2000 Cand.Scient,
DetaljerINF Oblig 2 semantikksjekk og kodegenerering
INF5110 - Oblig 2 semantikksjekk og kodegenerering Magnus Haugom Christensen Instituttet for Informatikk Universitetet i Oslo 27. Mars - 2012 Oversikt Informasjon Oppgaven Semantikksjekk Kodegenerering
DetaljerINF1000: Forelesning 4. Mer om arrayer Metoder
INF1000: Forelesning 4 Mer om arrayer Metoder MER OM ARRAYER 2 Array som en samling verdier Anta at vi ønsker å lagre en liste med navnene på alle INF1000-studentene: String[] studenter = new String[500];
DetaljerDagens tema INF1070. Vektorer (array er) Tekster (string er) Adresser og pekere. Dynamisk allokering
Dagens tema Vektorer (array er) Tekster (string er) Adresser og pekere Dynamisk allokering Dag Langmyhr,Ifi,UiO: Forelesning 23. januar 2006 Ark 1 av 23 Vektorer Alle programmeringsspråk har mulighet til
DetaljerProgrammeringsspråket C
Programmeringsspråket C Bakgrunn Implementasjon av Unix ved AT&Ts laboratorium i Palo Alto 1960 75. Navnet kommer fra BCPL B C. Opphavsmannnen heter Dennis Ritchie. ANSI standard i 1988; omtrent alle følger
DetaljerOPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?
OPPGAVESETT 4 PROSEDYRER Oppgavesett 4 i Programmering: prosedyrer. I dette oppgavesettet blir du introdusert til programmering av prosedyrer i Java. Prosedyrer er også kjent som funksjoner eller subrutiner.
DetaljerINF1000 Prøveeksamen Oppgave 7 og 9
INF1000 Prøveeksamen Oppgave 7 og 9 Høst 2015 Siri Moe Jensen 7a) Skriv en klasse Gave med to variabler som forteller hva som er i gaven, og hvor mye den har kostet. Klassen skal ha en konstruktør med
Detaljerpublic static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren
Prosedyrer Hensikten med en prosedyre Hensikten med en prosedyre er, logisk sett, å representere en jobb eller en funksjonalitet i et eller flere programmer. Bruk av entall er viktig: vi har generelt en
DetaljerUtførelse av programmer, metoder og synlighet av variabler i JSP
Utførelse av programmer, metoder og synlighet av variabler i JSP Av Alf Inge Wang 1. Utførelse av programmer Et dataprogram består oftest av en rekke programlinjer som gir instruksjoner til datamaskinen
DetaljerEKSAMENSFORSIDE Skriftlig eksamen med tilsyn
BOKMÅL EKSAMENSFORSIDE Skriftlig eksamen med tilsyn Emnekode: 108 + 108N Dato: 19.12.201 Ansv. faglærer: Roy M. Istad Campus: Bø Antall oppgaver: 5 Tillatte hjelpemidler (jfr. emnebeskrivelse): Alt trykt
DetaljerTDT4110 Informasjonsteknologi grunnkurs: Kapittel 7 Filer og unntak ( exceptions ) Professor Alf Inge Wang Stipendiat Lars Bungum
1 TDT4110 Informasjonsteknologi grunnkurs: Kapittel 7 Filer og unntak ( exceptions ) Professor Alf Inge Wang Stipendiat Lars Bungum 2 Læringsmål Mål Introduksjon til filer (som inndata og utdata) Å bruke
DetaljerOversikt Kompilering Syntaksanalyse Java Feilsjekking Oppsummering
Dagens tema Dagens tema Hva er kompilering? Hvordan foreta syntaksanalyse av et program? Hvordan programmere dette i Java? Hvordan oppdage feil? Kildekode Hva er kompilering? Anta at vi lager dette lille
DetaljerKapittel 1 En oversikt over C-språket
Kapittel 1 En oversikt over C-språket RR 2015 1 Skal se på hvordan man En innføring i C Skriver data til skjermen Lese data fra tastaturet Benytter de grunnleggende datatypene Foretar enkle matematiske
DetaljerUNIVERSITETET I OSLO
Bokmål UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i: INF1000 Grunnkurs i objektorientert programmering Eksamensdag: Fredag 4. desember 2015 Tid for eksamen: 14.30 (4 timer)
DetaljerObligatorisk oppgave 1 INF1020 h2005
Obligatorisk oppgave 1 INF1020 h2005 Frist: fredag 7. oktober Oppgaven skal løses individuelt, og må være godkjent for å kunne gå opp til eksamen. Før innlevering må retningslinjene Krav til innleverte
Detaljer