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

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

Viktig. Rettet i koden. Obligatorisk oppgave 2 Litt flere detaljer om semantikksjekk og kodegenerering. Semantikksjekk

INF Oblig 2 semantikksjekk og kodegenerering

INF5110. Oblig 2 presentasjon

Obligatorisk Innlevering 2

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

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

Oversikt. INF5110 Obligatorisk Oppgave 1. Andreas Svendsen SINTEF

Oversikt. Praktisk. Litt om meg. Obligatorisk oppgave 1 - Kort om oppgaven og verktøyene. Fredrik Sørensen OMS-gruppen, IfI.

Semantisk Analyse del I

Dagens tema: Sjekking

UNIVERSITETET I OSLO

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

Obligatorisk oppgave 1 INF Kompilatorteknikk Våren 2012 Frist mandag 19. mars

Obligatorisk Oppgave 1

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)

Diverse eksamensgaver

Hjemmeeksamen 2 i INF3110/4110

Obligatorisk Oppgave 1

Dagens tema: 12 gode råd for en kompilatorskriver. Sjekking av navn. Lagring av navn. Hvordan finne et navn?

Pensumoversikt - kodegenerering. Kap. 8 del 1 kodegenerering INF5110 v2006. Hvordan er instruksjonene i en virkelig CPU? Arne Maus, Ifi UiO

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

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

Dagens tema: 12 gode råd for en kompilatorskriver

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

Bakgrunnen for INF2100. Velkommen til INF2100. Prosjektet. Hva gjør en kompilator?

UNIVERSITETET I OSLO

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

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

Velkommen til INF2100

Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet doble.rusc (kalt kildekoden): Hva er kompilering?

UNIVERSITETET I OSLO

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

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

INF225 høsten 2003 Prosjekt del 4: kodegenerering

Hvordan skrive Flok og Flass kode? I mange tilfelle er det svært enkelt:

UNIVERSITETET I OSLO

Utførelse av programmer, metoder og synlighet av variabler i JSP

Dagens tema: INF2100. Syntaksanalyse. Hva annet gjør en kompilator? Sjekking av navnebruk. Testutskrifter

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

Syntaksanalyse. Dagens tema: Språkdiagrammene Jernbanediagrammene er et ypperlig utgangspunkt for å analysere et program: INF2100 INF2100 INF2100

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

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

Nybegynnerkurs i C. Øyvind Grønnesby. 14. oktober Introduksjon Typer Operatorer Kontrollstrukturer Pekere Makroer Lenker

Oversikt Kompilering Syntaksanalyse Java Feilsjekking Oppsummering

INF og 13. april, Stein Krogdahl, Ifi UiO

Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet (kalt kildekoden): Hva er kompilering?

Hva er kompilering? Dagens tema. En kompilator En kompilator leser Minila koden og lager Flok koden.

Generiske mekanismer i statisk typede programmeringsspråk

Løse reelle problemer

Del 1 En oversikt over C-programmering

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

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen Oppsummering

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

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

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

Kap. 8 del 1 kodegenerering INF5110 Vår2007

2 Om statiske variable/konstanter og statiske metoder.

INF1000 Metoder. Marit Nybakken 16. februar 2004

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

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

Kapittel 1 En oversikt over C-språket

INF1000: Forelesning 7. Konstruktører Static

INF1000 : Forelesning 4

Kap. 8 kodegenerering INF april, 2009

INF Uke 10. Ukesoppgaver oktober 2012

INF Obligatorisk innlevering 5

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

MER OM ARRAYER. INF1000: Forelesning 4. Anta at vi ønsker å lagre en liste med navnene på alle INF1000-studentene:

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

Del 4 Noen spesielle C-elementer

MED SVARFORSLAG UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet

INF1000: Forelesning 4. Mer om arrayer Metoder

Kap. 8 del 1 kodegenerering INF april, 2008

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

UNIVERSITETET I OSLO

Forelesning inf Java 5

Forelesning inf Java 5

Litt om Javas class-filer og byte-kode

INF1000: Forelesning 7

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

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

INF2810: Funksjonell Programmering. Tilstand og verditilordning

Hovedansvarlig. Symbolgenerator. Tregenerator. Litt mer kompliserte setninger med betingelser

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen

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

2 Om statiske variable/konstanter og statiske metoder.

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

INF 1000 høsten 2011 Uke september

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

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

INF1000 (Uke 6) Mer om metoder, tekster

Velkommen til INF2100 Jeg er Dag Langmyhr

INF1000 undervisningen INF 1000 høsten 2011 Uke september

Rep: Metoder. INF1000 (Uke 6) Mer om metoder, tekster. Rep: Metoder. 3 typer variable: Klassevariable. Java-programmene så langt i kurset:

Transkript:

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 Oppsummering 1

Oblig 1 er rettet Informasjon Sjekk at godkjentlisten er riktig på https://wwws.ifi.uio.no/ Oppgaven Utvide syntakstre-nodene til også å sjekke semantikk Bruke biblioteksklasser til å generere bytekode Teste semantikksjekken mot programmene i testsuiten Bare teste byte-kode-genereringen mot eksemplet RunMe.d 2

Sjekke semantikk PROGRAM-noden: Legge alle deklarasjoner til i symboltabellen Sjekke at de ikke er deklarert dobbelt Sjekke semantikken til deklarasjonene Sjekke at det er deklarert en Main-funksjon Kontrollere at den har returverdi VOID Kontrollere at den ikke har parametere Sjekke semantikk (2) FUNCDECL-noden: Legge til en ny blokk i symboltabellen Legge til parametere og deklarasjoner i symboltabellen Sjekke at de ikke er deklarert dobbelt Sjekke semantikken til statements-ene Sjekke at funksjonen enten er deklarert med returverdi eller VOID I dette tilfellet kan typesjekken av returverdien gjøres i RETURN-noden 3

Sjekke semantikk (3) La resten av semantikken sjekkes av de respektive nodene i syntakstreet Tilsvarende PrettyPrint-funksjonen Generere kode - Start // Make code: CodeFile codefile = new CodeFile(); codefile.addprocedure("print_float"); Alt starter her codefile.addprocedure("main"); codefile.addvariable("myglobalvar"); codefile.addprocedure("test"); codefile.addstruct("complex"); Legge til globale deklarasjoner 4

Generere kode - Main CodeProcedure main = new CodeProcedure("Main", VoidType.TYPE,codeFile); main.addinstruction(new RETURN()); Nytt objekt codefile.updateprocedure(main); for en metode // Oppdatering av global variabel codefile.updatevariable("myglobalvar", new RefType(codeFile.structNumber("Complex"))); Husk å oppdatere metoder og variable Generere kode - Procedure CodeProcedure test = new CodeProcedure("test", VoidType.TYPE,codeFile); test.addparameter("firstpar", FloatType.TYPE); test.addparameter("secondpar", new RefType( test.structnumber("complex"))); test.addinstruction(new LOADLOCAL( test.variablenumber("firstpar"))); test.addinstruction(new CALL( test.procedurenumber("print_float"))); test.addinstruction(new RETURN()); codefile.updateprocedure(test); En variabel må legges på stacken før den kan brukes som parameter Husk RETURNinstruksjon for metoder 5

Generere kode - Strukt CodeStruct complex = new CodeStruct("Complex"); complex.addvariable("real", FloatType.TYPE); complex.addvariable("imag", FloatType.TYPE); codefile.updatestruct(complex); Generere kode - End CodeProcedure printfloat = new CodeProcedure("print_float", VoidType.TYPE, codefile); test.addparameter("f", FloatType.TYPE); codefile.updateprocedure(printfloat); codefile.setmain("main"); byte[] bytecode = codefile.getbytecode(); //... Write the bytes to a file. Husk å sette hvilken metode som er Main 6

Listing av koden Loading from file:./example.bin Variables: 0: var Complex myglobalvar Procedures: 0: func void print_float() 1: func void Main() 0: return 2: func void test(float 0, Complex 1, float 2) 0: loadlocal 0 3: call print_float {0} 6: return Structs: 0: Complex 0: float 1: float Constants: STARTWITH: Main Som bytecode Antall variable Antall prosedyrer Antall structer Lengden på variabelnavn Lengden på prosedyrenavn Mainnummer Ant: par, var, inst Variabeltype (Ref) Struct nummer 0 RETURN (24) 7

IF-statement Expression Instruction (NOP) Statements (IF-part) Instruction (NOP) Instruction (NOP) Statments (ELSE-part) Instruction (NOP) to put jump if exp=false to put jump to end of else jump to here if exp=false jump to here when finished with IF-part Oppsummering Kontrollere statisk semantikk Utvide syntakstre-nodene Lage en context-klasse som håndterer symboltabell etc. Kjøre testene i katalogen test Generere byte-kode Utvide syntakstre-nodene Holde orden på stack etc. Kjøre RunMe.d Dokumentere løsningen i en rapport Frist: Fredag 8. mai 8

Kontaktinformasjon Send spørsmål når noe er uklart E-post: Andreas.Svendsen@sintef.no 9