Velkommen til INF2100

Like dokumenter
Velkommen til INF2100

Velkommen til INF2100

Velkommen til INF2100

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

Velkommen til INF2100 Jeg er Dag Langmyhr

Velkommen til INF2100

Velkommen til INF2100

Velkommen til INF2100

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

En kompilator for Pascal. Kompendium for INF2100

En kompilator for Pascal. Kompendium for INF2100

En snarvei til INF2100

Dagens tema: Sjekking

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

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

Hjemmeeksamen 2 i INF3110/4110

Oversikt Kompilering Syntaksanalyse Java Feilsjekking Oppsummering

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

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

Dagens tema: 12 gode råd for en kompilatorskriver

Programmeringsspråket C

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

Velkommen til INF Kompilatorteknikk

Velkommen til INF Kompilatorteknikk

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

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

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen Oppsummering

Velkommen til INF Introduksjon til operativsystemer og datakommunikasjon

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

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

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

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

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme

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

Kapittel 1 En oversikt over C-språket

Dagens tema: Sjekking (obligatorisk oppgave 3)

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

Velkommen til INF Introduksjon til operativsystemer og datakommunikasjon

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

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

Programmering. Carsten Wulff

En oppsummering (og litt som står igjen)

INF2810: Funksjonell Programmering. En metasirkulær evaluator

Et lite oppdrag i bakgrunnen

Obligatorisk Innlevering 2

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

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python

Programmeringsspråket C

Velkommen til INF5110 Kompilatorteknikk

INF2810: Funksjonell Programmering. En metasirkulær evaluator

Programmeringsspråket C

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

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

2 Om statiske variable/konstanter og statiske metoder.

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

Del 1 En oversikt over C-programmering

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

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

Pensum Hovedtanker Selvmodifiserende Overflyt Veien videre Eksamen. Oppsummering

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

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

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

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

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme

UNIVERSITETET I OSLO

INF 1000 høsten 2011 Uke september

INF1000 undervisningen INF 1000 høsten 2011 Uke september

Velkommen til INF Kompilatorteknikk

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

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

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

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

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

Velkommen til INF Kompilatorteknikk

Oversikt Kodegenerering Variabler Setninger Uttrykk While-setningen

Dagens tema: Mer av det dere trenger til del 1

Introduksjon til programmering og programmeringsspråk. Henrik Lieng Høgskolen i Oslo og Akershus

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

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

Læringsmål og pensum. v=nkiu9yen5nc

Introduksjon til programmering og programmeringsspråk

INF Oblig 2 semantikksjekk og kodegenerering

INF3110 Programmeringsspråk. Velkommen til kurset INF 3110/4110. Programmeringsspråk 1/24

INF 3110/4110. Velkommen til kurset. Programmeringsspråk. Først det praktiske

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

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme, del 2

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

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

UNIVERSITETET I OSLO Institutt for informatikk. RusC og Rask. Kompendium til INF2100. Stein Krogdahl Dag Langmyhr

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

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

Dagens tema. Oppsummering om assemblerspråk. Programmering i C. Bakgrunn. Et minimalt eksempel med forklaring. Datatyper i C.

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

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

INF2270 Datamaskinarkitektur

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

Oversikt. Informatikk. INF1000: Grunnkurs i objektorientert programmering. Utenom INF1000 Informasjon & hjelp

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen

Transkript:

Kursopplegg Velkommen til INF2100 Jeg er (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? Programmeringsspråket Pascal2016 En kort oversikt Syntaks Et par eksempler

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

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

En kompilator Hva gjør en kompilator? C-program if (a==0) a++; Kompilator gcc En kompilator oversetter et program til en annen kode, oftest maskin- eller assemblerkode. Assemblerspråk Assembler Maskinkode incl 0($ax,$cx,4) gas 00101111...

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

Python-interpreteren Python-program if i.area() > max: Noen interpretere leser kildekoden direkte (men vil oversette den til en passende form internt). Python-interpreter python

Pascal2016-kompilatoren Pascal2016-program x := x+1 Opplegget for Pascal2016 er det samme som for C og det vanligste for kompilatorer. Oppgaven deres er å skrive denne kompilatoren. Kompilator Assemblerkode Assembler Maskinkode java -jar pascal2016.jar addl $1,%eax gcc 81 01 00 00...

Dataspråk Ulike programmeringsspråk I dette kurset skal vi innom flere språk: Java, som benyttes til implementasjonen. Pascal2016, som er målet for prosjektet. x86-maskinkode til datamaskinen vår assemblerspråket til x86.

Selve kurset Oppbyggingen av kurset Kurset har seks hovedkomponenter: Forelesningene holdes i bolker; se http://www.uio.no/studier/emner/matnat/ifi/inf2100/h16/timeplan/. Forelesningene blir lagt ut som screencast etterpå. Gruppeøvelser 2 timer hver uke. Gruppearbeid for å løse oppgavene. Man jobber to og to (eller alene om man vil). Kompendiet gir en innføring i Pascal2016 og prosjektet. Basiskoden gir starthjelp til programmeringen. Nettsidene er også en viktig informasjonskanal.

Godkjenning Godkjenning av kurset Kurset har ikke karakterer, bare bestått/ikke bestått. Det er fire 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.

Programmeringshjelpemidler Ulike programmeringshjelpemidler Når man skal programmere et større prosjekt, trenger man hjelpemidler: et kompileringssystem (à la make eller ant) et dokumentasjonsopplegg (à la JavaDoc) et versjonskontrollsystem (à la Subversion)... Dette blir tatt opp i kurset (når dere er motivert for å høre om det ).

Programmeringshjelpemidler En siste ting Det er ingen krav til utviklingsverktøy. Du kan bruke Emacs, Atom, Eclipse eller hva du vil. Det finnes åpne kodebanker med gode utviklingsverktøy, som GitHub. Det er ikke lov å bruke disse hvis kildekoden deres blir tilgjengelig for alle.

Spesielt for INF1000-studenter En snarvei for INF1000-studenter Førstegangs INF1000-studenter med programmeringserfaring i Java kan få ta INF2100 om de består en opptaksprøve. Opptaksprøven foregår i Modula fredag kl 14.15 16.00.

En kort biografi Programmeringsspråket Pascal Laget 1970 av Niklaus Wirth ved ETH i Zürich. Formål: 1 Begynnerundervisning i programmering 2 Oppdra til å strukturere både data og setninger 3 Kunne kjøre på en liten maskin og likevel kompilere raskt Var kanskje det mest populære programmeringsspråket 1973 1985. I dag husket med glede, men ikke brukt (unntatt i Delphi).

Utrolig populært Hvorfor ble Pascal så populært? Fra 1970 begynte det å komme personlige datamaskiner: Billige (typisk 20 000 50 000 kr) Små (typisk 16 64KB) I starten var det eneste tilgjengelige programmeringsspråket Basic.

Veldig få likte Basic Programmeringsspråket Basic 10 i = 0 20 i = i + 1 30 PRINT i; " squared = "; i * i 40 IF i >= 10 THEN GOTO 60 50 GOTO 20 60 PRINT "Program Completed." 70 END Laget 1964 ved Dartmouth college i New Hampshire. Formål: 1 Undervisning i programmering 2 Benytte time-sharing så flere kunne bruke maskinen samtidig. Et meget enkelt språk som krevde svært få ressurser.

Hvorfor ikke? Basic var ikke populært hos informatikere Professor Bjørn Kirkerud (Ifi) Studenter som skal studere informatikk og som har programmert Basic, stiller betydelig svakere enn de som aldri har programmert! Professor Edsger Dijkstra It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration. Hvorfor ikke?

Hvorfor ikke? Basic var veldig ustrukturert og lærte programmererne uvaner: 10 i = 0 20 i = i + 1 30 PRINT i; " squared = "; i * i 40 IF i >= 10 THEN GOTO 60 50 GOTO 20 60 PRINT "Program Completed." 70 END All struktur var basert på linjenummer. Det var lettest å rette feil ved å legge inn noen ekstra hopp. Variabelnavn kun A og A1. Tidlige versjoner gikk langsommere om du la inn kommentarer. Betegnelsen spagettiprogrammering stammer fra Basic.

Men tilbake til Pascal Pascal Pascal ble oppfattet som redningen: Det var velstrukturert. Det var lett å implementere og krevde få ressurser. Nå ville «alle» bruke Pascal (i hvert fall på småmaskiner): CCITT laget sin egen Pascal for telefonsentraler: Chill. Det amerikanske forsvaret laget sin egen versjon Ada for alle sine innebygde systemer. LAT E X-kjernen er skrevet i Pascal.

Slik gikk det ikke Men så forsvant Pascal fra arenaen mot slutten av 1980-tallet. Pascal er et undervisningsspråk; det er for eksempel ikke et systemprogrammeringsspråk. Pascal er ikke objektorientert (men noen har laget ulike oo-varianter). Småmaskinene ble større og kraftigere. Pascal har også sine særegenheter som irriterte programmerere.

Hovedprogrammet Programmeringsspråket Pascal2016 Vårt språk Pascal2016 er en litt redusert utgave av Pascal. Hovedprogrammet Hovedprogrammet er rett og slett en blokk med et navn, som definert av dette jernbanediagrammet: program program name ; block. Terminaler (runde) er faste symboler. Ikke-terminaler (firkanter) angir definisjon et annet sted.

Hovedprogrammet Syntaks Språkets syntaks (= grammatikk) defineres med jernbanediagrammer som gir en helt presis definisjon. Men de forteller ikke alt om et språk. Semantikk Språkets betydning (= semantikk) forteller hva som skjer under kjøringen. Noen bruker en formell notasjon; vi bruker norsk. Eksempel: En funksjons returverdi angis ved å tilordne den til funksjonen. Annen informasjon I tillegg finnes andre opplysninger som programmereren må vite om, som biblioteket, hvordan kommentarer ser ut etc.

Alt ligger i blokker Blokker Pascal er et blokkstrukturert språk der alle definisjoner (av konstanter, variabler, funksjoner og prosedyrer) ligger i en blokk, Blokker inneholder også setninger. block const decl part var decl part func decl begin statm list end proc decl Forskjell fra Java I Pascal kan vi ha blokker inni blokker inni...

Setninger Setninger statm list ; statement Forskjell fra Java I Pascal brukes semikolon som skilletegn mellom setninger. (I Java er det avslutningstegn.)

Setninger Noen setninger er ganske enkle. statement empty statm assign statm compound statm empty statm compound statm begin statm list end if-statm proc call proc call, while-statm name ( expression )

Setninger De andre setningene kjenner vi fra andre språk, selv om syntaksen er litt anderledes: assign statm variable := expression if-statm if expression then statement else statement while-statm while expression do statement

Konstanter Konstanter Det er lett å definere konstanter: const decl part const const decl unsigned constant name const decl numeric literal name = constant ; char literal constant numeric literal prefix opr unsigned constant digit 0-9 prefix opr char literal char except + -

Prosedyrer og funksjoner Prosedyrer og funksjoner I Pascal skiller man tydelig mellom prosedyrer (som tilsvarervoid-funksjoner i Java) og funksjoner. Prosedyrer returnerer aldri en verdi, så de kan bare kalles som setninger. Funksjoner returnerer alltid en verdi, så de kan bare kalles som del av et uttrykk. Funksjonens returverdi angis ved å tilordne den til «funksjonen selv» (se eksempel senere). Prosedyrer og funksjoner er definert med en blokk, så de kan inneholde lokale prosedyrer og funksjoner. Rekursive prosedyrer og funksjoner (som kaller seg selv) er lov.

Hva er lov? Er dette lov? if (A = 15) then begin A := A + 1; end while A <> 0 do A = A/2; var v1: integer, v2: char; const C1 = 1; C2 = C1 + 1; Jernbanediagrammene gir oss svaret.

Diverse annet Store og små bokstaver Vi skille ikke på store og små bokstaver i Pascal. integer, Integer og INTEGER er samme navnet. Kommentarer Kommentarer kan angis på to ulike måter: {...} /*...*/ Utskrift Utskrift skjer med prosedyren write som kan ha vilkårlig mange parametre av ulik type. Konstanten eol angir linjeskift.

Standardeksemplet for programmeringsspråk Standardeksemplet Alle presentasjoner av programmeringsspråk starter med dette eksemplet: program Hei; begin write( H, e, i,!, eol) end. Inntil dere har laget deres egen kompilator, kan dere bruke denne: $ ~inf2100/pascal2016 hei.pas This is the Ifi Pascal2016 compiler (2016-08-22) Parsing... checking... generating code...ok Running gcc -m32 -o hei hei.s -L. -L/hom/inf2100 -lpas2016 $./hei Hei!

Et mer realistisk eksempel Et primtallprogram /* This program prints all primes less than 1000 using a technique called "The sieve of Eratosthenes". */ program Primes; const Limit = 1000; var prime : array [2..Limit] of Boolean; i : integer;

Et mer realistisk eksempel procedure FindPrimes; var i1 : integer; I2 : Integer; begin i1 := 2; while i1 <= Limit do begin i2 := 2*i1; while i2 <= Limit do begin prime[i2] := false; i2 := i2+i1 end; i1 := i1 + 1 end end; {FindPrimes}

Et mer realistisk eksempel procedure P4 (x : integer); begin if x < 1000 then write( ); if x < 100 then write( ); if x < 10 then write( ); write(x); end; {P4} procedure PrintPrimes; var i : integer; NPrinted : integer; begin i := 2; NPrinted := 0; while i <= Limit do begin if prime[i] then begin if (NPrinted > 0) and (NPrinted mod 10 = 0) then write(eol); P4(i); NPrinted := NPrinted + 1; end; i := i + 1; end; write(eol) end; {PrintPrimes}

Et mer realistisk eksempel begin {main program} i := 2; while i <= Limit do begin prime[i] := true; i := i+1 end; /* Find and print the primes: */ FindPrimes; PrintPrimes; end. {main program}

Et mer realistisk eksempel $ ~inf2100/pascal2016 primes.pas This is the Ifi Pascal2016 compiler (2016-08-22) Parsing... checking... generating code...ok Running gcc -m32 -o primes primes.s -L. -L/hom/inf2100 -lpas2016 $./primes 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281 283 293 307 311 313 317 331 337 347 349 353 359 367 373 379 383 389 397 401 409 419 421 431 433 439 443 449 457 461 463 467 479 487 491 499 503 509 521 523 541 547 557 563 569 571 577 587 593 599 601 607 613 617 619 631 641 643 647 653 659 661 673 677 683 691 701 709 719 727 733 739 743 751 757 761 769 773 787 797 809 811 821 823 827 829 839 853 857 859 863 877 881 883 887 907 911 919 929 937 941 947 953 967 971 977 983 991 997

Hva har vi lært i dag? Oppsummering Pascal har mange språkelementer (variabler, funksjoner, setninger etc) felles med C og Java, men de ser oftest litt anderledes ut. Bruk jernbanediagrammene til å avgjøre hva som er lov. Bruk også kompilatoren for å se hva som er lov, og hva som skjer når man kjører koden.