INF5110. Oblig 2 presentasjon

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

Obligatorisk Innlevering 2

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

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.

Obligatorisk Oppgave 1

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

Semantisk Analyse del I

2 Om statiske variable/konstanter og statiske metoder.

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

2 Om statiske variable/konstanter og statiske metoder.

Diverse eksamensgaver

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

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

Obligatorisk Oppgave 1

Del 4 Noen spesielle C-elementer

Kapittel 1 En oversikt over C-språket

Del 1 En oversikt over C-programmering

INF1000: Forelesning 7

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)

Datatyper og typesjekking

Datatyper og typesjekking

INF1000 undervisningen INF 1000 høsten 2011 Uke september

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

INF1000: Forelesning 7. Konstruktører Static

Velkommen til. INF våren 2016

Statisk semantisk analyse - Kap. 6

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

Litt om Javas class-filer og byte-kode

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

Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

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

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

INF Objektorientert programmering. Datastrukturer i Java Klasser med parametre

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

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

Kapittel 1: Datamaskiner og programmeringsspråk

UNIVERSITETET I OSLO

Dagens tema: Sjekking

INF Objektorientert programmering. Datastrukturer i Java Klasser med parametre

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

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

Enkle generiske klasser i Java

INF og 13. april, Stein Krogdahl, Ifi UiO

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

Litt om Javas håndtering av tall MAT-INF 1100 høsten 2004

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

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

INF1000 Metoder. Marit Nybakken 16. februar 2004

Hjemmeeksamen 2 i INF3110/4110

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen Oppsummering

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

Generiske mekanismer i statisk typede programmeringsspråk

Programmeringsspråket C

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

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

Transkript:

INF5110 Oblig 2 presentasjon

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

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 mandag 2 mai Orakeltime onsdag 27 april

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-funksjonen Må være deklarert på øverste blokkniva Ingen argumenter eller returverdi Funksjonsdeklarasjoners returverdi ikke noe (void) type i symboltabellen (predefinert eller brukerdefinert struct)

Semantikksjekk - Stmts 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 funksjonens deklarerte type WhileStmt Må ha en betingelse av typen bool IfStmt Må ha en betingelse av typen bool

Semantikksjekk Exps NewExp Argumentet må være deklarert som en strukt-type Literals Må være av en de forhåndsdefinerte typene i språket float, int, string, bool eller null Binære uttrykk Lik type, etter evt. typeforfremming, på begge sider av operatoren Aritmetiske uttrykk Begrenses til aritmetiske typer (int eller float) Logiske uttrykk (med "&&", " " eller "!") Begge operander må være av typen bool

Semantikksjekk Exps (2) CallStmt Navnet som kalles må være deklarert som funksjon 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 funksjondeklarasjonen Var Evt. strukt-type må være deklarert Navnet må være deklarert

Kodegenerering Benyttebytecode-bibliotekettilålagebyte-kode Beskrevet i notat om bytecode og interpreter (bytecodeinterpreter.pdf) Det er en begrenset semantikk for kodegenereringen RunMe.comp skal benyttes for å teste kodegenereringen Testprogrammene i katalogen test skal ikke benyttes

Kodegenerering (2) Forskjeller i semantikken Ikke blokkstruktur Kun et globalt og et lokalt nivå Ikke referanseparametere Litt annen bruk av navn Funksjoner kalles Procedure

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 metoden, 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: Mandag 2. mai