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

Like dokumenter
INF Oblig 2 semantikksjekk og kodegenerering

INF5110. Oblig 2 presentasjon

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

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

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. 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.

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)

Obligatorisk Oppgave 1

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

Semantisk Analyse del I

Del 4 Noen spesielle C-elementer

UNIVERSITETET I OSLO

Diverse eksamensgaver

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

Kapittel 1 En oversikt over C-språket

Dagens tema: Sjekking

Del 1 En oversikt over C-programmering

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

2 Om statiske variable/konstanter og statiske metoder.

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

2 Om statiske variable/konstanter og statiske metoder.

INF225 høsten 2003 Prosjekt del 4: kodegenerering

Del 3: Evaluere uttrykk

Dagens tema: 12 gode råd for en kompilatorskriver

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

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

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

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

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

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

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

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

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

INF 1000 høsten 2011 Uke september

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

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

INF1000 undervisningen INF 1000 høsten 2011 Uke september

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

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

Hjemmeeksamen 2 i INF3110/4110

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

Velkommen til INF2100

Datatyper og typesjekking

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

UNIVERSITETET I OSLO

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

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

Oversikt Kompilering Syntaksanalyse Java Feilsjekking Oppsummering

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

Generiske mekanismer i statisk typede programmeringsspråk

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

UNIVERSITETET I OSLO

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen Oppsummering

Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

Litt om Javas class-filer og byte-kode

Programmeringsspråket C

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

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

INF1000: Forelesning 7. Konstruktører Static

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen

INF og 13. april, Stein Krogdahl, Ifi UiO

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

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

INF1000: Forelesning 7

Debugging. Tore Berg Hansen, TISIP

Datatyper og typesjekking

Anatomien til en kompilator - I

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; }

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

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

Runtime-omgivelser Kap 7 - I

UNIVERSITETET I OSLO

Dagens tema: Mer av det dere trenger til del 1

Runtimesystemer Kap 7 - I

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

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

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

IN 147 Program og maskinvare

INF1000 Metoder. Marit Nybakken 16. februar 2004

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

Datatyper og typesjekking

Oversikt Kodegenerering Variabler Setninger Uttrykk While-setningen

Datatyper og typesjekking

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen

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

Løse reelle problemer

IN1010 våren januar. Objektorientering i Java

Programmeringsspråket C Del 2

Programmeringsspråket C Del 2

156C. Algoritmer og maskinspråk. IT1101 Informatikk basisfag. Maskinspråk: det maskinen forstår. Assembler / assemblerspråk

Kapittel 1: Datamaskiner og programmeringsspråk

Transkript:

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 en patch for oblig 2. Inneholder hovedsaklig tester for semantikksjekken og kodegenereringen. Nye versjoner av Compiler.java og build.xml Frist: Fredag 7. mai

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

Kontrollere at syntakstreet (programmet) oppfyller alle kravene i språknotatet Statisk semantikk Gi en kort feilmelding dersom det er feil Kompilatoren returnerer en av følgende verdier: (0) Godkjent (1) Syntaksfeil (2) Semantikkfeil Generere byte-kode ved hjelp av biblioteksklasser Teste semantikksjekken mot programmene i testsuiten Teste byte-kode-genereringen mot eksempelet RunMe.d Rapport som beskriver løsningen

Multiple deklarasjoner av et navn på samme nivå må detekteres Typekonvertering int is-a float Main-funksjonen Må være deklarert på øverste blokknivå Ingen argumenter eller returverdi Funksjonsdeklarasjoners returverdi ikke noe (void) type i symboltabellen (predefinert eller en instans av en klasse)

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

NewExp Argumentet må være en deklarert klasse 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

CallStmt Navnet som kalles må være deklarert som funksjon Kallet må ha likt antall aktuelle, som funksjonen har 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 Navnet må være deklarert. Hvis instansvariabel (på formen x.y) X må være deklarert og ha medlemsvariabelen y

Benytte bytecode-biblioteket til å lage bytekode Beskrevet i notat om bytecode og interpreter (bytecode-interpreter.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 Litt annen bruk av navn Funksjoner kalles Procedure Klasser kalles strukter

// 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

CodeProcedure main = new CodeProcedure("Main", VoidType.TYPE,codeFile); main.addinstruction(new RETURN()); codefile.updateprocedure(main); Nytt objekt for en metode // Oppdatering av global variabel codefile.updatevariable("myglobalvar", new RefType(codeFile.structNumber("Complex"))); Husk å oppdatere metoder og variable

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

Husk at det vi i syntaks og semantikkdelen kalte klasser, kalles for strukter i biblioteket vi benytter. CodeStruct complex = new CodeStruct("Complex"); complex.addvariable("real", FloatType.TYPE); complex.addvariable("imag", FloatType.TYPE); codefile.updatestruct(complex);

CodeProcedure printfloat = new CodeProcedure("print_float", VoidType.TYPE, codefile); test.addparameter("f", FloatType.TYPE); codefile.updateprocedure(printfloat); Husk å sette hvilken metode som er Main codefile.setmain("main"); byte[] bytecode = codefile.getbytecode(); //... Write the bytes to a file.

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

Antall variable Antall prosedyrer Antall structer Lengden på variabelnavn Lengden på prosedyrenavn Mainnummer Ant: par, var, inst Variabeltype (Ref) Struct nummer 0 RETURN (24)

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

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 7. mai