Obligatorisk Innlevering 2
|
|
|
- Hans-Petter Dahl
- 8 år siden
- Visninger:
Transkript
1 Obligatorisk Innlevering 2 INF Kompilatorteknikk Våren 2017 Frist :59 Dette er den andre av to oppgaver våren Den bygger videre på det som er gjort i den første innleveringen. Hensikten med oppgaven Hensikten er å få enda mer praktisk erfaring med hva som gjøres i en kompilator og hvordan dette kan programmeres: Gjøre syntaktisk analyse og bygge et abstrakt syntakstre (oblig 1) Anvendelse av et abstrakt syntakstre Typesjekking, sjekking av navn og blokkstrukturer i programmer Kodegenerering til en egen bytekode (litt forenklet variant av Javas bytekode) fra et abstrakt syntakstre og litt om interpretering av bytekode Oppgaven Del to av den obligatoriske oppgaven bygger på den første delen, og går ut på å sjekke at kravene til statisk semantikk som er beskrevet i språknotatet [1] overholdes. Resultatene fra kjøring av en utlevert test suite (et sett av automatiske tester) skal leveres. I tillegg skal det også leveres en listing av bytekoden for programmet RunMe.cmp. Ta utgangspunkt i klassene dere lagde i innlevering 1 for å generere abstrakte syntakstrær. Dere kan gjøre forandringer hvis det trengs. Kode for semantisk sjekk og kodegenerering legges i metoder i disse klassene. Kompilatoren skal returnere en verdi som forteller om programmet ble godkjent (0), om det var syntaksfeil (1) eller om det var semantikkfeil (2). Dersom man finner feil under kompilering skal det gis en kort melding på skjerm om hva som gikk galt. Bytekode skal genereres ved bruk av et eget bibliotek (se pakken bytecode.* under./src og underpakkene [2]). Legg merke til at det er begrensninger i bytekoden (bl.a. mht. blokknivåer), slik at det ikke er mulig å generere bytekode for alle eksemplene i katalogen test (se lenger ned). Virtuell maskin og bytekode
2 Den virtuelle maskinen og bytekode er grundig beskrevet i notat om bytekode og interpreter. Legg merke til at bibliotekprosedyrene ikke skal ha en bindestrek i navnene (i notatet er dette tilfellet). F.eks. er printint()riktig. Dessuten refereres det til funksjoner (func) mens vi forholder oss til prosedyrer (proc). Det er laget en pakke med klasser for å lage bytekode. For å lage bytekode, opprettes et objekt av klassen CodeFile. Dette objektet benyttes for å legge til variabler, klasser, metoder og bytekodeinstruksjoner. Når alt er lagt til, kan man hente ut bytekoden med getbytecode() som lager en array med bytes (byte[]): CodeFile codefile = new CodeFile(); // Her bygges bytekoden opp... byte[] bytecode = codefile.getbytecode(); DataOutputStream stream = new DataOutputStream( new FileOutputStream( Navnet på fil for bytekode ) ); stream.write( bytecode ); stream.close(); Bytekoden er stack-basert og har 35 instruksjoner. Bytekoden er ikke like uttrykkskraftig som språket Compila17, derfor er reglene for programmene dere skal generere bytekode for forskjellige fra de dere skal implementere i semantikksjekken. Forskjellene er: Det er ikke blokknivåer. Altså må alle klasser være deklarert på det ytterste nivået. Det er heller ikke prosedyrer inne i prosedyrer. Den støtter ikke referansetyper (ref og deref). Det er også brukt litt andre navn, og eksempler som ikke stemmer helt med beskrivelsen av Compila17: Klasser kalles strukter, og deklareres med nøkkelordet struct. Typen er angitt før variabler og parametre, i stedet for etter som i Compila17. Prosedyrer kalles i notat funksjoner, og deklareres der med nøkkelordet func i stedet for proc som vi bruker. Merk at det ikke er noe krav at man sjekker at programmet som det skal genereres kode for følger disse reglene, man kan for enkelhets skyld bare anta at programmer som kommer som input til kodegenerator følger disse reglene. Et eksempel på et program som følger de begrensede reglene er./codeexamples/runme.cmp. 2
3 Under følger et kort eksempel på hvordan man bygger opp bytekoden til et enkelt program med en global variabel og en enkel prosedyre med to parametere (float og Complex) samt en lokal variabel (int). Metoden printer ut float-parameteren og returnerer. Klassen Complex blir også definert. Legg spesielt merke til at alle deklarasjonene blir definert først og oppdatert senere. Legg også merke til at parameterne får nummer fra 0 og oppover og at variabler inne i prosedyren blir nummerert videre oppover. Man må også fortelle den virtuelle maskinen hva som er main-prosedyren. Legg merke til at bibliotekprosedyrer som benyttes må legges til (riktig nok uten innhold) - se hvordan printfloat har blitt lagt til. // Kode for å lage example.bin: CodeFile codefile = new CodeFile(); codefile.addprocedure( printfloat ); codefile.addprocedure( Main ) ; codefile.addvariable( myglobalvar ); codefile.addprocedure( test ); codefile.addstruct( Complex ); CodeProcedure printfloat = new CodeProcedure( "printfloat", VoidType.TYPE, codefile ); printfloat.addparameter( "f", FloatType.TYPE ); codefile.updateprocedure( printfloat ); CodeProcedure main = new CodeProcedure( Main, VoidType.TYPE, codefile ); main.addinstruction( new RETURN() ); codefile.updateprocedure( main ); codefile.updatevariable( myglobalvar, new RefType( codefile.structnumber( Complex ) ) ) ; 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( printfloat ) ) ); test.addinstruction( new RETURN() ); codefile.updateprocedure( test ); CodeStruct complex = new CodeStruct( Complex ); complex.addvariable( Real, FloatType.TYPE ); complex.addvariable( Imag, FloatType.TYPE ); codefile.updatestruct( complex ); codefile.setmain( Main ); byte[] bytecode = codefile.getbytecode(); //... Lagre til filen./code-examples/example.bin Resultatet (listingen) av dette blir (ved å kjøre biten med kode ovenfor og så kjøre kommandoen java runtime.virtualmachine -l./code-examples/example.bin): Loading from file:./code-examples/example.bin Variables: 3
4 0: var Complex myglobalvar Procedures: 0: func void Main() 0: return 1: func void test(float 0, Complex 1) 0: loadlocal 0 1: call print_float {100} 2: return Structs: 0: Complex 0: float 1: float Constants: STARTWITH: Main Patch og test suite Det er laget en patch til koden fra Oblig 1 som er tilgjengelig fra kurssidene [3] og den består av følgende: En ny Compiler-klasse (./src/compiler/compiler.java). Den inneholder et skall som brukes av testen. Den forutsetter at metoden compile() returnerer 0, 1 eller 2, som beskrevet tidligere. En hjelpeklasse til testen (./src/test/fileendingfilter.java). Klassen som utfører testen (./src/test/tester.java). En katalog med filer det testes mot (./tests/). Filene med navn som inneholder fail skal gi semantikkfeil (2). Ingen av filene skal gi syntaksfeil (1). Et testprogram for den virtuelle maskinen (./codeexamples/runme.cmp). Noen linjer som kan legges til build-filen for å: (1) Kalle testen (compile-test, test). (2) Kompilere og kjøre eksemplet RunMe (compile-runme, list-runme, runrunme). Dette ligger i filen./build.xml.patch. Plasser filene slik at katalogene ligger i prosjektmappen du har fra før (pass på å legge til innholdet i Compiler.java og build.xml uten å skrive over de filene dere har). 4
5 Etter det kan testene kjøres med ant test og dere kan kompilere RunMe med ant compile-runme og liste ut bytekoden med ant list-runme. Klassen Tester kaller klassen Compiler for alle testene i katalogen./tests/. Det skrives ut en linje for hver test, samt en oppsummering. Sjekkliste for del to Under følger en sjekkliste for semantikken (merk at det kan være flere krav, les også språknotatet): Typekonvertering: int is-a float, int kan forfremmes til float i aritmetiske uttrykk, returverdier og som aktuelt argumentuttrykk i prosedyrekall Main-prosedyren 1. Prosedyredeklarasjonen til Main må finnes på øverste blokknivå av programmet 2. Signaturen må matche proc Main(), d.v.s. ingen argumenter og ingen returverdi Andre prosedyredeklarasjoners returverdi er: ikke noe, eller type i symboltabellen (predefinert eller brukerdefinert) Stmts AssignStmt 1. Variabelen på venstresiden må være deklarert 2. 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. Merk også særtilfellet uten returverdi, da blir argumenter til return-setningen en feil WhileStmt: må ha en betingelse av typen bool IfStmt: må ha en betingelse av typen bool Exps NewExp: Navnet som instansieres må være en definert klasse Literals: Må være av en de forhåndsdefinerte typene i språket: float, int, string, eller bool. Binære uttrykk (felles for alle operatorer bortsett fra negasjon) må ha lik type (evt. etter typeforfremming) på begge sider av operatoren Aritmetiske uttrykk: som for binære uttrykk, men typene må også begrenses 5
6 til aritmetiske (int eller float) Logiske uttrykk (med &&, eller not): operandene må være av typen bool CallStmt 1. Navnet som kalles må være deklarert som prosedyre 2. Kallet må ha samme antall aktuelle parametre som formelle parametre 3. De aktuelle parametrene må ha samme type som (eller typer som er mulig å tilordne til samme type som) de formelle parametrene 4. Bruk av referansetyper (ref og deref) må stemme overens med deklarasjonene Var 1. Hvis objektvariabel, må variabelen være definert i klassen som objektet er instansiert fra 2. Navnet må være deklarert Gjennomføring og levering Gruppene fra innlevering 1 beholdes. Det som skal leveres er: En forside med navn og brukernavn til de som leverer besvarelsen En kort rapport om gjennomføringen med forklaring av designet All kode som trengs for å bygge og kjøre parserne (altså hele din mappestruktur), herunder: JFlex-koden for skanneren CUP-koden for en av grammatikkene Java-koden for å bygge syntakstrær, semantikksjekking og bytekodegenerering Byggeskript Instruksjoner for bygging og kjøring Utskrift fra kjøring med test suiten (ant test) Utskrift av listing av bytekoden til eksemplet RunMe.cmp (ant list-runme) Fristen for levering er satt til :59. Ved sykdom må dispensasjon fås fra administrasjonen, samt at den foreløpige versjonen av innleveringen må leveres hvis sykdomsperioden overskrider fristen. Se for øvrig: Krav for å få bestått: - RunMe.cmp kompileres og kjøres korrekt. - Minst 32 av de 42 testene evalueres riktig. 6
7 - Alle punktene under seksjonen Gjennomføring og Levering er tatt hensyn til. - Løsningen kompilerer og kjører på en UiO-maskin (test dette!). Besvarelsen skal levers via Devilry. Filnavnet skal være [deres_brukernavn]_inf5110_oblig2. Referanser [1] [2] [3] 7
Oblig 2 - Simpila. INF Kompilatorteknikk. Våren Typesjekking, sjekking av bruk av navn og blokkstrtuktur i språk.
Oblig 2 - Simpila INF5110 - Kompilatorteknikk Våren 2012 Dette er den andre av to oppgaver våren 2012. Den bygger videre på det som er gjort i oblig 1. 1 Hensikten med oppgaven Hensikten er å få enda mer
INF5110. Oblig 2 presentasjon
INF5110 Oblig 2 presentasjon Informasjon Oppgaven Semantikksjekk Kodegenerering Bytecode-biblioteket Ant-targets Oppsummering Oversikt Informasjon Oblig 2 tilgjengelig på kurssiden Patch med testfiler
Viktig. Rettet i koden. Oppgaven. Obligatorisk oppgave 2 - Kort om oppgaven og litt informasjon. Fredrik Sørensen OMS-gruppen, IfI
Viktig Obligatorisk oppgave 2 - Kort om oppgaven og litt informasjon Fredrik Sørensen OMS-gruppen, IfI Ny patch (patch_oblig2.zip) legges ut på kurssiden i dag. Oblig 1 vil bli rettet denne uken Sjekk
Viktig. Rettet i koden. Obligatorisk oppgave 2 Litt flere detaljer om semantikksjekk og kodegenerering. Semantikksjekk
Obligatorisk oppgave 2 Litt flere detaljer om semantikksjekk og kodegenerering Viktig Ny patch (patch_oblig2.zip) er lagt ut (15/4) Oblig 1 vil bli rettet denne uken Sjekk om det er registrert at den er
INF5110 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
Obligatorisk Oppgave 1
Obligatorisk Oppgave 1 INF5110 - Kompilatorteknikk Våren 2016 Frist: 20. mars 23:59 Hensikten med Oppgaven Tanken bak denne oppgaven er at man skal få litt praktisk erfaring med følgende: Bruke skannings-
Beskrivelse av programmeringsspråket Compila15 INF Kompilatorteknikk Våren 2015
Beskrivelse av programmeringsspråket Compila15 INF5110 - Kompilatorteknikk Våren 2015 Her beskrives syntaksen og den statiske semantikken (hva som skal sjekkes av kompilatoren) til språket Compila15. Den
Obligatorisk Oppgave 1
Obligatorisk Oppgave 1 INF5110/INF9110 - Kompilatorteknikk Våren 2013 Frist fredag 15. mars Hensikten med Oppgaven Tanken bak denne oppgaven er at man skal få litt praktisk erfaring med følgende: Bruke
Beskrivelse av programmeringsspråket Simpila INF5110 - Kompilatorteknikk Våren 2012
Beskrivelse av programmeringsspråket Simpila INF5110 - Kompilatorteknikk Våren 2012 Her beskrives syntaksen og den statiske semantikken (hva som skal sjekkes av kompilatoren) til språket Simpila. Den dynamiske
Obligatorisk oppgave 1 INF Kompilatorteknikk Våren 2012 Frist mandag 19. mars
Obligatorisk oppgave 1 INF5110 - Kompilatorteknikk Våren 2012 Frist mandag 19. mars 1. Hensikten med oppgaven Tanken bak denne oppgaven er at man skal få litt praktisk erfaring med følgende: Bruke skannings-
Oversikt. Praktisk. Litt om meg. Obligatorisk oppgave 1 - Kort om oppgaven og verktøyene. Fredrik Sørensen OMS-gruppen, IfI.
Oversikt Obligatorisk oppgave 1 - Kort om oppgaven og verktøyene Fredrik Sørensen OMS-gruppen, IfI Litt om meg Praktisk Oppgaven Verktøyene Ant JFlex CUP Utfordringer Torsdag Litt om meg Fredrik Sørensen
Hjemmeeksamen 2 i INF3110/4110
Hjemmeeksamen 2 i INF3110/4110 Innleveringsfrist: onsdag 19. november kl. 1400 Innlevering Besvarelsen av oppgave 2,3,4 og 5 skal leveres skriftlig på papir i IFI-ekspedisjonen. Merk denne med navn, kurskode,
Semantisk Analyse del I
Semantisk Analyse del I Attributtgrammatikker Kapittel 6.1-6.2 26.02.2013 1 Statisk semantisk analyse kapittel 6: Innhold Generelt om statisk semantisk analyse Attributt-grammatikker (kapittel 6.1-6.2)
Diverse eksamensgaver
Diverse eksamensgaver Noen har fått den idé å lage et språk hvor klasser kan ha noe tilsvarende byvalue-result -parametere. Klasser har ingen konstruktører, og by-value-result parametere spesifiseres som
Kort 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: [email protected] Utdanning: Dataingeniør, 2000 Cand.Scient,
Forklaring til programmet AbstraktKontoTest.java med tilhørende filer Konto.java, KredittKonto.java, SpareKonto.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 Forklaring til programmet AbstraktKontoTest.java med tilhørende
Bakgrunnen for INF2100. Velkommen til INF2100. Prosjektet. Hva gjør en kompilator?
Kursopplegg Velkommen til INF2100 Bakgrunnen Bakgrunnen for INF2100 Jeg er Dag Langmyhr ([email protected]). Dagens tema: Hva går kurset ut på? Bakgrunn for kurset Hvordan gjennomføres kurset? Hvordan får
2 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.
INF Obligatorisk innlevering 5
INF1000 - Obligatorisk innlevering 5 Frist: 2. Oktober kl 22:00 Temaer denne uka: Klasser og objekter. I denne obligen skal du som nytt tema jobbe med klasser og objekter, i tillegg til å bruke det du
Litt 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
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.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
Dagens 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:
Programmering i C++ Løsningsforslag Eksamen høsten 2005
Programmering i C++ Eksamen høsten 2005 Simen Hagen Høgskolen i Oslo, Avdeling for Ingeniørutdanning 7. desember 2005 Generelt Denne eksamensoppgaven består av tre oppgaver, pluss en ekstraoppgave. Det
Dagens 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
OPPGAVE 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.
2 Om statiske variable/konstanter og statiske metoder.
Gaustadbekkdalen, januar 22 Litt om datastrukturer i Java Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Innledning Dette notatet beskriver noe av det som foregår i primærlageret når
NOTAT (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
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 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
Forelesning 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
Kompilering 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
Oversikt. INF1000 Uke 2. Repetisjon - Program. Repetisjon - Introduksjon
Oversikt INF1000 Uke 2 Variable, enkle datatyper og tilordning Litt repetisjon Datamaskinen Programmeringsspråk Kompilering og kjøring av programmer Variabler, deklarasjoner og typer Tilordning Uttrykk
Kapittel 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
public 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
Del 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
Javas 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
public 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
INF Innleveringsoppgave 6
INF1010 - Innleveringsoppgave 6 Frist: Onsdag 16. mars, 10:00 Maks 6 poeng Om obligatorisk oppgave 4, 6 og 7 i INF1010, våren 2016: "Leger og resepter" Du skal jobbe med en problemstilling omkring leger
Velkommen til INF5110 Kompilatorteknikk
Velkommen til INF5110 Kompilatorteknikk 15. januar 2013 Kursansvarlige: Stein Krogdahl [[email protected]] Ragnhild Kobro Runde [[email protected]] Henning Berg (oblig-ansvarlig) [[email protected]] Kursområdet:
Java PRP brukermanual
Java PRP brukermanual 1.1 Introduksjon 1.1.1 Hva er Java PRP Java PRP (Parallel Recursive Procedure) gir oss muligheten til automatisk parallellisering av programmer, som baserer seg på noen rekursive
Oversikt. 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
Velkommen til INF2100 Jeg er Dag Langmyhr
Velkommen til Jeg er Dag Langmyhr ([email protected]). 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
Dagens 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
Statisk semantisk analyse - Kap. 6
Statisk semantisk analyse - Kap. 6 Generelt om statisk semantisk analyse Attributt-grammatikker Symboltabell Datatyper og typesjekking 3/15/11 1 Generelt om semantisk analyse Oppgave: Sjekke alle krav
Datatyper og typesjekking
Datatyper og typesjekking Om typer generelt Hva er typer? Statisk og dynamisk typing Hvordan beskrive typer syntaktisk? Hvordan lagre dem i kompilatoren? Gjennomgang av noen typer Grunntyper Type-konstruktører
Datatyper og typesjekking
Datatyper og typesjekking Om typer generelt Hva er typer? Statisk og dynamisk typing Hvordan beskrive typer syntaktisk? Hvordan lagre dem i kompilatoren? Gjennomgang av noen typer Grunntyper Type-konstruktører
Kapittel 1: Datamaskiner og programmeringsspråk
Kapittel 1: Datamaskiner og programmeringsspråk Redigert av: Khalid Azim Mughal ([email protected]) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen
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 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 =
INF1000 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
Dagens 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
UNIVERSITETET 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å
Dagens tema Syntaks (kapittel Komp. 47, kap. 1 og 2)
Dagens tema Syntaks (kapittel 2.1 + Komp. 47, kap. 1 og 2) 1/19 Forelesning 6 1.10.2003 Litt om kompilering og interpretering En kompilator oversetter et program til et annet språk, for eksempel maskinspråk.
Anatomien til en kompilator - I
Anatomien til en kompilator - I program Symboltabell tekst tokens syntaks-tre beriket syntaks-tre Finne struktur i programmet OK i henhold til grammatikk? Preprocessor Makroer Betinget kompilering Filer
Litt om kompilering og interpretering. Dagens tema Syntaks (kapittel Komp. 47, kap. 1 og 2) Syntaks og semantikk
Litt om kompilering og interpretering Dagens tema Syntaks (kapittel 2. + Komp. 47, kap. og 2) En kompilator oversetter et program til et annet språk, for eksempel maskinspråk. Et program interpreteres
Del 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
Kapittel 1. Datamaskiner og programmeringsspråk. 1.1 Programmering
Kapittel 1 Datamaskiner og programmeringsspråk Dette kapitlet er en kort introduksjon til programmering. Vi vil se på hvordan man skriver, bygger og kjører programmer, samt illustrere noen sentrale programmeringsbegrep
Hva 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
Lø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
Programmeringsspråket C Del 3
Programmeringsspråket C Del 3 Michael Welzl E-mail: [email protected] 29.08.13 inf1060 1 Dynamisk allokering Ofte trenger man å opprette objekter under kjøringen i tillegg til variablene. Standardfunksjonen
Dagens 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:
IN1010 V18, Obligatorisk oppgave 5
IN1010 V18, Obligatorisk oppgave 5 Innleveringsfrist: Tirsdag 17.04. kl 10:00 Versjon 1.3 (12.04.2018) Sist modifisert av Silje Merethe Dahl. Innledning I denne oppgaven skal du bruke rekursjon til å lage
Dagens 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
INF1000 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
Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000
Oblig2 - obligatorisk oppgave nr 2 (av 4) i INF1000 Leveringsfrist Oppgaven må leveres senest fredag 29 september kl 1600 Viktig: les slutten av oppgaven for detaljerte leveringskrav Formål Formålet med
Plan: Parameter-overføring Alias Typer (Ghezzi&Jazayeri kap.3 frem til 3.3.1) IN 211 Programmeringsspråk
Plan: Parameter-overføring Alias Typer (Ghezzi&Jazayeri kap.3 frem til 3.3.1) Funksjonelle språk (Ghezzi&Jazayeri kap.7 frem til 7.4) Neste uke: ML Ark 1 av 16 Forelesning 16.10.2000 Parameteroverføring
Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 v2008
Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 v2008 Leveringsfrist Oppgaven må løses individuelt og leveres senest fredag 22. februar 2008 kl 16.00 via Joly. Viktig: les slutten av oppgaven for
Spørsmål og svar rundt oblig 1 og verktøy
Spørsmål og svar rundt oblig 1 og verktøy Sven-Jørgen Karlsen, gruppelærer i INF5110 våren 2006 03/16/06 1 Obligen i ett nøtteskall Del 1: 1) Lage en parser og skanner for Diss, med
