INF Oblig 2 semantikksjekk og kodegenerering

Like dokumenter
INF5110. Oblig 2 presentasjon

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

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

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

Obligatorisk Innlevering 2

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

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

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

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

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

Oversikt. INF5110 Obligatorisk Oppgave 1. Andreas Svendsen SINTEF

UNIVERSITETET I OSLO

Obligatorisk Oppgave 1

2 Om statiske variable/konstanter og statiske metoder.

Diverse eksamensgaver

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

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

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

2 Om statiske variable/konstanter og statiske metoder.

Semantisk Analyse del I

Obligatorisk Oppgave 1

Del 3: Evaluere uttrykk

Generiske mekanismer i statisk typede programmeringsspråk

INF225 høsten 2003 Prosjekt del 4: kodegenerering

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

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

Kapittel 1 En oversikt over C-språket

Del 1 En oversikt over C-programmering

Datatyper og typesjekking

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

Velkommen til. INF våren 2016

Hjemmeeksamen 2 i INF3110/4110

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

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

INF 1000 høsten 2011 Uke september

INF1000 undervisningen INF 1000 høsten 2011 Uke september

INF1000: Forelesning 7

Skal bindes opp til en deklarasjon av samme navn

Enkle generiske klasser i Java

Dagens tema: Sjekking

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

Skal bindes opp til en deklarasjon av samme navn

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

Del 4 Noen spesielle C-elementer

UNIVERSITETET I OSLO

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

Statisk semantisk analyse - Kap. 6

INF1000: Forelesning 7. Konstruktører Static

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

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

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

UNIVERSITETET I OSLO

Statisk semantisk analyse - Kap. 6

Datatyper og typesjekking

Forklaring til programmet AbstraktKontoTest.java med tilhørende filer Konto.java, KredittKonto.java, SpareKonto.java

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen Oppsummering

INF1000 : Forelesning 4

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

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

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

Forkurs INF1010. Dag 2. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 14.

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen

Datatyper og typesjekking

Datatyper og typesjekking

INF Objektorientert programmering. Datastrukturer i Java Klasser med parametre

Spørsmål og svar rundt oblig 1 og verktøy

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

Debugging. Tore Berg Hansen, TISIP

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

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

Kapittel 1: Datamaskiner og programmeringsspråk

Semantisk Analyse del III

Litt om Javas class-filer og byte-kode

INF Objektorientert programmering. Datastrukturer i Java Klasser med parametre

Velkommen til INF2100

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

INF 1000 (uke 2) Variabler, tilordninger og uttrykk

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

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

Dagens tema: 12 gode råd for en kompilatorskriver

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

INF1000 : Forelesning 1 (del 2)

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

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

MED SVARFORSLAG UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet

UNIVERSITETET I OSLO

Oversikt Kodegenerering Variabler Setninger Uttrykk While-setningen

Programmeringsspråket C

Generiske mekanismer i statisk typede programmeringsspråk

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen

UNIVERSITETET I OSLO

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

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

Kapittel 1: Datamaskiner og programmeringsspråk

Forkurs INF1010. Dag 2. Andreas Færøvig Olsen Tuva Kristine Thoresen

INF1000 Metoder. Marit Nybakken 16. februar 2004

Transkript:

INF5110 - Oblig 2 semantikksjekk og kodegenerering Magnus Haugom Christensen Instituttet for Informatikk Universitetet i Oslo 27. Mars - 2012

Oversikt Informasjon Oppgaven Semantikksjekk Kodegenerering Bytecode-biblioteket Ant-targets Oppsummering

Informasjon Oblig 2 tilgjengelig på kurssiden Patch med testfiler og filer for kodegenerering Nye versjoner av Compiler.java og build.xml Ny kode i runtime.* og bytecode.* Frist onsdag 2. mai

Oppgaven Kontrollere at syntakstreet (programmet) oppfyller alle kravene i språknotatet (statisk semantiske regler) Gi en kort feilmelding dersom det er feil Kompilatoren skal gi følgende svar: (0) Godkjent (1) Syntaksfeil (2) Semantikkfeil Generere bytecode vha biblioteksklasser Teste semantikksjekken mot programmene i testsuiten Teste bytecode-genereringen mot eksemplet RunMe.comp Rapport som beskriver løsningen

Semantikksjekk Multiple deklarasjoner av et navn på samme nivå må detekteres Typekonvertering int is-a float Main-prosedyren Må være deklarert på øverste blokkniva Ingen argumenter eller returverdi prosedyredeklarasjoners returverdi ikke noe (void) type i symboltabellen (predefinert eller brukerdefinert struct)

Semantikksjekk - Statements AssignStmt Variabelen på venstresiden må være deklarert Typene på venstre side og høyre side må være like, etter evt. typekonvertering ReturnStmt Typen til uttrykket skal stemme overens med prosedyrens deklarerte type WhileStmt Må ha en betingelse av typen bool IfStmt Må ha en betingelse av typen bool

Semantikksjekk - Expressions NewExp variablen må være av en type av en klasse. Literals Må være av en de forhåndsdefinerte typene i språket float int string bool null Relasjons uttrykk Lik type, etter evt. typeforfremming, på begge sider av operatoren Aritmetiske uttrykk Begrenses til aritmetiske typer (int eller float)

Semantikksjekk - Expressions(2) Logiske uttrykk ( &&, eller not ) Begge operander må være av typen bool CallStmt Navnet som kalles må være deklarert som en prosedyre Kallet må ha likt antall aktuelle og formelle parametre De aktuelle parametrene må ha lik type (eller mulig å tilordne) som de formelle parametrene Bruk av referanser (ref") må stemme overens med prosedyredeklarasjonen Var Navnet må være deklarert Ved remote referanse til et felt i et objekt. Så må variablen være deklarert som et objekt av en klasse.

Kodegenerering Benyttebytecode-biblioteket til å lagebyte-kode Beskrevet i notat om bytecode og interpreter (bytecodeinterpreter.pdf) Det er en begrenset semantikk for kodegenereringen RunMe.d skal benyttes for å teste kodegenereringen Testprogrammene i katalogen test skal ikke benyttes Forskjeller i semantikken Ikke blokkstruktur Kun et globalt og et lokalt nivå Ikke referanseparametere

Bytecode-biblioteket CodeFile codefile = new CodeFile(); // Her bygges byte-koden opp... byte[] bytecode = codefile.getbytecode(); DataOutputStream stream = new DataOutputStream( new FileOutputStream( eks.bin ) ); stream.write(bytecode); stream.close();

Bytecode-biblioteket(2) // Definerer først deklarasjonen codefile.addprocedure( Main ); // Lager prosedyren, variablen eller strukten CodeProcedure main = new CodeProcedure( Main, VoidType.TYPE, codefile); // Legger til dens egenskaper main.addinstruction(new RETURN()); // Oppdaterer Code-File-objektet codefile.updateprocedure(main);

Ant-targets test Kjører testene (ca. 40 stk) compile-runme Kompilerer eksemplet RunMe.comp list-runme Lister innholdet i bytekoden laget for RunMe.comp run-runme Kjører RunMe.bin på den virtuelle maskinen

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.comp Dokumentere løsningen i en rapport Frist: onsdag 2. mai