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

Velkommen til INF2100

Velkommen til INF2100 Jeg er Dag Langmyhr

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

Velkommen til INF2100

En kompilator for Pascal. Kompendium for INF2100

Dagens tema: Sjekking

En kompilator for Pascal. Kompendium for INF2100

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

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

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

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?

En snarvei til INF2100

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

Dagens tema: Mer av det dere trenger til del 1

En oppsummering (og litt som står igjen)

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

Dagens tema: 12 gode råd for en kompilatorskriver

Hjemmeeksamen 2 i INF3110/4110

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

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen Oppsummering

Læringsmål og pensum. Utvikling av informasjonssystemer. Oversikt. Systemutvikling Systemutvikling i seks faser Femstegs prosedyre for programmering

Velkommen til INF Kompilatorteknikk

Programmeringsspråket C

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

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

Dagens tema: Sjekking (obligatorisk oppgave 3)

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

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

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

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

Programmeringsspråk for nybegynnere. Krav til språket. Krav til språket. Krav til språket

Programmering. Carsten Wulff

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

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

Velkommen til INF Kompilatorteknikk

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

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

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

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

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

INF 1000 høsten 2011 Uke september

INF1000 undervisningen INF 1000 høsten 2011 Uke september

Oversikt Kodegenerering Variabler Setninger Uttrykk While-setningen

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm

Kapittel 1 En oversikt over C-språket

Utførelse av programmer, funksjoner og synlighet av variabler (Matl.)

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

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

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

Velkommen til INF Introduksjon til operativsystemer og datakommunikasjon

<?php. count tar en array som argument, og returnerer et tall som uttrykker antallet innførsler i arrayen.

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

Lese fra fil. INF1000 : Forelesning 5. Eksempel. De vanligste lesemetodene. Metoder:

Del 1 En oversikt over C-programmering

Oppbygningen av en datamaskin Det viktigste i en moderne datamaskin er hovedkortet («motherboard»):

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)

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

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

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen

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

Løse reelle problemer

MAT1030 Forelesning 30

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

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

UNIVERSITETET I OSLO

Leksjon 3. Kontrollstrukturer

TOD063 Datastrukturer og algoritmer

Ordliste. Obligatorisk oppgave 1 - Inf 1020

2 Om statiske variable/konstanter og statiske metoder.

IN 147 Program og maskinvare

Obligatorisk Innlevering 2

Velkommen til INF Introduksjon til operativsystemer og datakommunikasjon

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

Administrivia INF 3110/ INF /02/2005 1

INF2810: Funksjonell Programmering

Pensum Hovedtanker Selvmodifiserende Overflyt Veien videre Eksamen. Oppsummering

INF2810: Funksjonell Programmering

Kapittel 1. Datamaskiner og programmeringsspråk. 1.1 Programmering

I dag. Rep: Oppsummering - variabler. Rep: Datatyper. INF1000 (Uke 3) Mer om uttrykk, terminal I/O, forgreninger

Diverse eksamensgaver

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme

Shellscripting I. Innhold

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

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

Emnekode: LV121A Dato: Alle skrevne og trykte hjelpemidler

Del 3: Evaluere uttrykk

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

INF2810: Funksjonell Programmering. En metasirkulær evaluator

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

UNIVERSITETET I OSLO

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

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 Pascal2100 En kort oversikt Syntaks Et par eksempler

Bakgrunnen Bakgrunnen for INF2100 I begynnerkursene har dere lært å programmere, men bare 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 Pascal2100. Dette gir forståelse for hvordan en kompilator fungerer kjennskap til maskin- og assemblerspråk eksempel på hvorledes et programmeringsspråk er definert og bygget opp

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 incl 0($ax,$cx,4) Assembler gas Maskinkode 00101111...

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

Python-interpreteren Perl-program x++ unless /x/; Noen interpretere leser kildekoden direkte (men vil oversette den til en passende form internt). Perl-interpreter perl

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

Dataspråk Ulike programmeringsspråk I dette kurset skal vi innom flere språk: Java, som benyttes til implementasjonen. Pascal2100, 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/h15/timeplan/. Forelesningene blir lagt ut som podcast 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 Pascal2100 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. Hvis du vil bruke et program som Eclipse, er det helt OK. 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 Fortress torsdag kl 14.15.

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 5 LET S = 0 10 MAT INPUT V 20 LET N = NUM 30 IF N = 0 THEN 99 40 FOR I = 1 TO N 45 LET S = S + V(I) 50 NEXT I 60 PRINT S/N 70 GO TO 5 99 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 Alle tester resulterte i hopp angitt med linjenummer. Alle for-løkker var identifisert med navn. Det var lettest å rette feil ved å legge inn noen ekstra hopp. 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.

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

Hovedprogrammet Programmeringsspråket Pascal2100 Vårt språk Pascal2100 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.

Alt ligger i blokker Blokker Pascal er et blokkstrukturert språk der alle definisjoner (av konstanter, typer, variabler, funksjoner og prosedyrer) ligger i en blokk, Blokker inneholder også setninger som skal utføres. block const decl part type decl part var decl part begin statm list end func decl 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 numeric literal const decl digit 0-9 name = constant ; constant string literal char except name numeric literal string literal

Typer Typer Det er like lett å definere nye typer: type decl part type type decl range type type decl constant.. constant type name = type ; enum-type, type ( enum literal ) type name range type enum-type array-type array [ type ] of type array-type

Prosedyrer og funksjoner Prosedyrer og funksjoner I Pascal skiller man tydelig mellom prosedyrer (som tilsvarer void-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ålig 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( Hallo, alle sammen!, eol) end. Inntil dere har laget deres egen kompilator, kan dere bruke denne: $ ~inf2100/pascal2100 hei.pas This is the Ifi Pascal2100 compiler (2015-08-18) Parsing... checking... generating code...ok Running gcc -m32 -o hei hei.s -L. -L/hom/inf2100 -lpas2100 $./hei Hallo, alle sammen!

Et mer realistisk eksempel Et primtallprogram /* This program prints all primes up to Limit {which is 1000 in this example} 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 div 2 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 function NDigits (v : integer): integer; /* How many digits are there in v (which is >= 0)? */ begin if v <= 9 then NDigits := 1 else NDigits := 1 + Ndigits(v div 10) end; {NDigits} procedure P4 (x : integer); /* *Note* Equivalent to "printf("%4d",x);" in C. */ var NSpaces : integer; begin NSpaces := 4 - NDigits(x); while NSpaces > 0 do begin write( ); NSpaces := NSpaces-1 end; write(x); end; {P4}

Et mer realistisk eksempel 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/pascal2100 primes.pas This is the Ifi Pascal2100 compiler (2015-08-18) Parsing... checking... generating code...ok Running gcc -m32 -o primes primes.s -L. -L/hom/inf2100 -lpas2100 $./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.