Velkommen til INF2100

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

Velkommen til INF2100 Jeg er Dag Langmyhr

Dagens tema: INF2100. Utvidelser av Minila array-er. tegn og tekster. Flass- og Flokkode. prosedyrer. Prosjektet struktur. feilhåndtering.

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

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

Dagens tema: 12 gode råd for en kompilatorskriver

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

Velkommen til INF2100. Bakgrunnen for INF2100. Hva gjør en kompilator? Prosjektet. Jeg er Dag Langmyhr

Velkommen til INF2100

Velkommen til INF2100

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

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

Velkommen til INF2100

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

Råd nr 1: Start nå! Det tar typisk timer å programmere Del 1 om man ikke har gjort slikt før. Dagens tema:

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

Fra Minila til Flink via Java

Velkommen til INF2100

ISO Dagens tema. Tegn. Uttrykk. I Minila lagres kun heltall, men de kan tolkes som tegn. Det siste om Minila.

En snarvei til INF2100

Velkommen til INF2100

Velkommen til INF Kompilatorteknikk

Velkommen. Velkommen til INF2270. Datamaskinarkitektur. Motto: Datamaskinen på tvers

Velkommen til INF Kompilatorteknikk

Læringsmål og pensum. v=nkiu9yen5nc

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

INF okt. 2004

Programmeringsspråket C Del 2

Programmeringsspråket C

INF2270 Datamaskinarkitektur

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 1 Introduksjon til Programmering og Python. Professor Alf Inge Wang

Programmeringsspråket C Del 2

Programmeringsspråket C Del 2

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

INF1070. Velkommen til. Datamaskinarkitektur. Motto: Hvordan bygger man en datamaskin? INF1070

Anbefalt litteratur: Pensum-bøker: Forelesere: Velkommen til INF Introduksjon til operativsystemer og datakommunikasjon

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

Velkommen til INF Introduksjon til operativsystemer og datakommunikasjon

Obligatorisk Innlevering 2

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

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

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python

Velkommen til INF Kompilatorteknikk

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen Oppsummering

Generiske mekanismer i statisk typede programmeringsspråk

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

Velkommen til INF Introduksjon til operativsystemer og datakommunikasjon

Velkommen til INF5110 Kompilatorteknikk

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

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

Hvordan en prosessor arbeider, del 1

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

Programmeringsspråket C Del 3

INF1000 undervisningen INF 1000 høsten 2011 Uke september

INF 1000 høsten 2011 Uke september

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

Oversikt Kompilering Syntaksanalyse Java Feilsjekking Oppsummering

IN 147 Program og maskinvare

Programmeringsspråket C Del 3

Programmeringsspråket C Del 3

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

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

Velkommen til INF Kompilatorteknikk

Programmeringsspråket C Del 3

En oppsummering (og litt som står igjen)

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

Dagens tema Syntaks (kapittel Komp. 47, kap. 1 og 2)

Programmeringsspråket C

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

Kapittel 1: Datamaskiner og programmeringsspråk

Litt om kompilering og interpretering. Dagens tema Syntaks (kapittel Komp. 47, kap. 1 og 2) Syntaks og semantikk

Ark 1 av 18. programmeringsspråkenes. Velkommen til IN 211. verden. IN 211 Programmeringsspråk

Velkommen til MAT1030!

MAT1030 Diskret Matematikk

Kapittel 1 En oversikt over C-språket

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

Programmering Høst 2017

IN 147 Program og maskinvare. Velkommen til IN 147. Program- og maskinvare

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

INF1000 oppgaver til uke 38 (17 sep 23 sep)

Oppsummering Assemblerkode Hopp Multiplikasjon Kode og data Array Oppsummering

Velkommen til. IN1010 Objektorientert programmering Våren 2018

Pensum Hovedtanker Selvmodifiserende Overflyt Veien videre Eksamen. Oppsummering

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

Vektorer. Dagens tema. Deklarasjon. Bruk

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

Hjemmeeksamen 2 i INF3110/4110

Dagens tema INF1070. Vektorer (array er) Tekster (string er) Adresser og pekere. Dynamisk allokering

Den siste dagen. Pensumoversikt Hovedtanker i kurset Selvmodifiserende kode Overflyt Veien videre... Eksamen

Feilmeldinger, brukerinput og kontrollflyt

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

INF2270 Datamaskinarkitektur

løsningsforslag-uke5.txt

MAT1030 Plenumsregning 1

Programmeringsspråket C

UNIVERSITETET I OSLO

Del 4 Noen spesielle C-elementer

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

Transkript:

Kursopplegg Velkommen til INF2100 Jeg er Dag Langmyhr (dag@ifi.uio.no). Dagens tema: Hva går kurset ut på? Bakgrunn for kurset Hvordan gjennomføres kurset? Hvordan får man det godkjent? Pause (med registrering av fremmøte) Programmeringsspråket Minila En kort oversikt Syntaks Fire eksempler

Bakgrunnen Bakgrunnen for INF2100 I INF1000 20 har dere lært å programmere, men bare små programmer (< 1000 linjer). Hensikten med INF2100 er å gi mer programmeringstrening forstå mekanismene man trenger i større programmer (som objektorientering)

Prosjektet Prosjektet Prosjektet er valgt fordi det har en nytteverdi i seg selv: Skriv en kompilator for programmeringsspråket Minila. Dette gir forståelse for hvordan en kompilator fungerer kjennskap til maskin og assemblerspråk hvordan et programmeringsspråk er definert og bygget opp

En kompilator Hva gjør en kompilator? En kompilator oversetter et program til en annen kode, som maskin eller assemblerkode. C-program if (a == 0) ++a; Kompilator gcc Assemblerspråk IncI Arr* Assembler gas Maskinkode 00101111

Java kompilatoren Noen kompilatorer oversetter til en intern kode som tolkes av en interpret. (Det finnes også Java kompilatorer som lager maskinkode, men de er ikke så vanlige.) Java-program Bil a = new Bil(); Kompilator javac Java byte-kode CAFE BABE 7501 Java-simulator java

Minila systemet Opplegget for Minila ligner mye på Java systemet. Minila-program Kompilator call P with a; INCI var * Flass-kode Flass-assembler Flok-kode Flink-simulator 2 5 17 10 Oppgaven deres er å skrive denne kompilatoren.

Dataspråk Ulike programmeringsspråk I dette kurset skal vi innom flere språk: Java benyttes til all implementasjon. Minila er målet for prosjektet. Flok er maskinkoden til datamaskinen vår Flink. Flass er assemblerspråket til Flok.

Selve kurset Oppbyggingen av kurset Kurset har fem hovedkomponenter: Forelesningnen holdes i utgangspunktet hver uke. Gruppeøvelsene er 2 timer hver uke. Gruppearbeid for å løse oppgavene. Man jobber to og to (eller alene om man vil). Man kan velge partner selv, eller la gruppelæreren plukke ut par. Kompendiet gir en grundig innføring i Minila og prosjektet. Nettsidene er også en viktig informasjonskanal.

Godkjenning Godkjenning av kurset Kurset har ikke karakterer, bare bestått/ikke bestått. Det er tre obligatoriske oppgaver. Når de er godkjent, er kurset godkjent.

Godkjenning Men... Mot slutten av semesteret vil noen bli plukket ut til en samtale om programmet de har laget. Dette kan man stryke på. Siden man normalt jobber i lag, forventes at begge har kjennskap til hovedstrukturen i programmet begge kan identifisere sin del av programmet (som skal være rundt halvparten) der de kan forklare nøye hvorfor koden er blitt slik den er.

Samarbeid Samarbeid og fusk Samarbeid og utveksling av ideer er bra! Kopiering og fusk er ikke bra! Gode råd for samarbeid Snakk gjerne med andre om ideer. Kopier aldri andres kode.

Eksempel 1 one.min prog begprog outint(1) 1; outline; endprog Dette programmet skriver ut tallet 1.

Eksempel 1 one.min Programmet kompileres og kjøres med kommandoene > minilac one.min Dette er Minila kompilatoren (versjon 2005 5b) Analyse: start slutt Kodegenerering: start slutt Kompileringen var vellykket > flink one.flok Dette er Flink (versjon 3.0f) 1 Total execution time: 103

Eksempel 1 Grammatikk Vi kan beskrive grammatikken til Minila med jernbanediagrammer: Program prog ; Deklarasjon begprog ; Setning endprog

Eksempel 1 Setning Tekst Variabel := Uttrykk intext Navn outchar Uttrykk outint ( Tall ) Uttrykk outline outtext Navn Tekst If-setning Repeat-setning While-setning call Navn with Uttrykk into Variabel

Eksempel 1 Uttrykk Konstant Variabel inchar inint + * / Konstant Tall Tegn

Eksempel 1 Grammatikken forteller om et program er korrekt når det gjelder oppsettet (men det kan allikevel ha logiske feil). Dette programmet er ikke korrekt: prog begprog outint 1 endprog;

Eksempel 2 formel.min prog var n; begprog n := inint; outint(10) 2+n*3; outline; endprog Dette programmet leser inn et tallnog regner ut en formel. > flink formel.flok 7 27 Hvorfor er ikke svaret 23?

Eksempel 2 Deklarasjon var Navn [ Tall ], proc Navn in Navn [ ] out Navn Deklarasjon ; begproc ; Setning endproc

Eksempel 2 Uttrykk Konstant Variabel inchar inint + * Lovlige operatorer er +,, * og /. De har samme presedens. Vi har ikke parenteser i uttrykkene. Derfor må vi bruke flere variable enn vi er vant til. /

Eksempel 2 Variabel Navn [ Konstant ] Navn

Eksempel 3 gcd.min prog var a, b; begprog a := inint; b := inint; while a <> b do if a < b then b := b a; else a := a b; endif; endwhile; outint(1) a; outline; endprog

Eksempel 3 Programmet finner største felles divisor: > flink gcd.flok 52 221 13

Eksempel 3 Grammatikk Nytt er tester: If-setning if Betingelse then ; Setning else endif ; Setning

Eksempel 3 Kun veldig enkle betingelser Betingelse er lov: Uttrykk = Uttrykk =/= <> < <= > >=

Eksempel 3 Det finnes to typer løkker: While-setning while Betingelse do ; Setning endwhile Repeat-setning repeat ; Setning until Betingelse

Eksempel 4 Prosedyrer Nest siste utvidelse (foreløbig) er prosedyrer (kjent som metoder i Java) med følgende spesialiteter: Vi kan ha prosedyrer deklarert lokalt inne i andre prosedyrer. Minila prosedyrer kan ha inntil én parameter. Prosedyrene kan ikke kalles rekursivt.

Eksempel 4 Vektorer Vektorer (= array er) er greie å bruke: var a [3]; deklarere a med elementene a[1], a[2] og a[3]. (Dessuten finnes a[0] som alltid inneholder vektorens lengde (her 3).)

Eksempel 4 fak.min, del 1 prog proc fakultet in n out fak; var i; begproc fak := 1; i := 1; while i <= n do fak := fak * i; i := i+1; endwhile; endproc; var farr[15]; proc skrivfak in n; var i; begproc i := 1; while i <= n do outint(5) i; outint(10) farr[i]; outline; i := i+1; endwhile; endproc; var grense, i;

Eksempel 4 fak.min, del 2 begprog grense := inint; if grense > 12 then grense := 12; else if grense < 0 then grense := 0; endif; endif; i := 1; while i <= grense do call fakultet with i into farr[i]; i := i+1; endwhile; call skrivfak with grense; endprog

Eksempel 4 > flink fak.flok 15 1 1 2 2 3 6 4 24 5 120 6 720 7 5040 8 40320 9 362880 10 3628800 11 39916800 12 479001600 Eksekveringstid: 5118

Eksempel 4 Grammatikk, Deklarasjon var Navn [ Tall ] proc Navn in Navn [ ] out Navn Deklarasjon ; begproc ; Setning endproc

Eksempel 4 Variabel Navn [ Konstant ] Navn Legg merke til at indeksen kun kan være en konstant eller en enkel variabel.

Programmering i Minila Oppsummering Minila er et meget enkelt programmeringsspråk. Det bør være enkelt å lære. Ikke alt man forventer, er lov. Sjekk grammatikken!