Datatyper og typesjekking

Like dokumenter
Datatyper og typesjekking

Datatyper og typesjekking

Datatyper og typesjekking

Semantisk Analyse del III

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

Anatomien til en kompilator - I

Anatomien til en kompilator - I

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

Skal bindes opp til en deklarasjon av samme navn

Skal bindes opp til en deklarasjon av samme navn

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

Runtime-omgivelser Kap 7 - I

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

Runtimesystemer Kap 7 - I

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

Runtimesystemer - II. Funksjoner som parametere. Virtuelle metoder

Statisk semantisk analyse - Kap. 6

Statisk semantisk analyse - Kap. 6

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

UNIVERSITETET I OSLO

Runtimesystemer Kap 7 - I

Runtime-omgivelser Kap 7 - II

Diverse eksamensgaver

Generiske mekanismer i statisk typede programmeringsspråk

Statisk semantisk analyse - Kap. 6 Foiler ved Birger Møller-Pedersen (Forelest 10/3 og 12/ av Stein Krogdahl)

Semantisk Analyse del I

Runtimesystemer - II. Parameteroverføring Call by value Call by reference Call by value-result Call by name INF 3110/ INF

UNIVERSITETET I OSLO

Konstruktører. Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver. skjer følgende:

UNIVERSITETET I OSLO

MED SVARFORSLAG UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet

Dagens tema: Sjekking

Dagens tema: Datastrukturer

2 Om statiske variable/konstanter og statiske metoder.

Dagens tema: Kjøresystemer II

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

INF5110. Oblig 2 presentasjon

UNIVERSITETET I OSLO

Variable Man kan bruke variable i ML. ML (kap 5 og 6) Nye datatyper INF3110/4110 INF3110/4110 INF3110/4110 INF3110/4110. Variable i ML.

Generiske mekanismer i statisk typede programmeringsspråk INF5110 April, 2009

INF3110 Programmeringsspråk. Dagens tema. Typer (Kapittel 3 frem til ) Innføring i ML (Kapittel & ML-kompendiet.) 1/19

Typer. 1 Type: boolean. 2 Verdimengde: {true, false} 3 Operatorer: NOT, AND, OR... 1/19. Forelesning Forelesning

Løsnings forslag i java In115, Våren 1996

Eksamen i IN 110, 18. mai 1993 Side 2 Del 1 (15%) Vi skal se på prioritetskøer av heltall, der vi hele tiden er interessert i å få ut den minste verdi

Dagens tema. Mer om C Enkle datatyper Sammensatte datatyper: Vektorer og matriser Tekster Mengder Strukturer Unioner Ringbuffere

Obligatorisk Innlevering 2

2 Om statiske variable/konstanter og statiske metoder.

Del 4 Noen spesielle C-elementer

Dagens tema. INF Algoritmer og datastrukturer. Binærtrær. Generelle trær

Dagens tema INF1070. Signaturer. Typekonvertering. Pekere og vektorer. struct-er. Definisjon av nye typenavn. Lister

INF110 Algoritmer og datastrukturer TRÆR. Vi skal i denne forelesningen se litt på ulike typer trær:

UNIVERSITETET I OSLO

Del 3: Evaluere uttrykk

Signaturer. Dagens tema. En vanlig feil int-funksjon. Dette kan noen ganger gi rare feilmeldinger: INF1070 INF1070 INF1070 INF1070

INF Oblig 2 semantikksjekk og kodegenerering

INF1010 Rekursive metoder, binære søketrær. Algoritmer: Mer om rekursive kall mellom objekter Ny datastruktur: binært tre

Med Svarforslag UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet. 3 sider (side 6, 7 og 8, rives ut, fylles ut og leveres)

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

Gjøre noe i hele treet = kalle på samme metode i alle objekten. Java datastruktur Klassestruktur

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

... Når internminnet blir for lite. Dagens plan: Løsning: Utvidbar hashing. hash(x) katalog. O modellen er ikke lenger gyldig ved

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

UNIVERSITETET I OSLO

INF1000: Forelesning 7

UNIVERSITETET I OSLO

Repitisjonskurs. Arv, Subklasser og Grensesnitt

Løsnings forslag i java In115, Våren 1998

INF2810: Funksjonell Programmering. Dataabstraksjon og Trerekursjon

IN 147 Program og maskinvare

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

Eks 1: Binærtre Binærtretraversering Eks 2: Binærtre og stakk

Kapittel 1 En oversikt over C-språket

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

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

Oppsummering. Kort gjennomgang av klasser etc ved å løse halvparten av eksamen Klasser. Datastrukturer. Interface Subklasser Klasseparametre

INF2220: Forelesning 1. Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel )

INF1000: Forelesning 7. Konstruktører Static

KONTINUASJONSEKSAMEN

INF1010 Binære søketrær ++

Programmeringsspråket C Del 3

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

INF1010 våren 2008 Uke 4, 22. januar Arv og subklasser

Del 1 En oversikt over C-programmering

Litt om Javas class-filer og byte-kode

Repetisjon: Binære. Dagens plan: Rød-svarte trær. Oppgave (N + 1)!

INF april, 2015 Stein Krogdahl Ifi, UiO. Svar på oppgaver til kap. 8. Ble lagt ut 24. april

Programmeringsspråket C Del 3

Programmeringsspråket C Del 3

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

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

PG4200 Algoritmer og datastrukturer Forelesning 5 Implementasjon av lister

Generiske mekanismer i statisk typede programmeringsspråk

E K S A M E N. Algoritmiske metoder I. EKSAMENSDATO: 11. desember HINDA / 00HINDB / 00HINEA ( 2DA / 2DB / 2EA ) TID:

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

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

Definisjon. I et binært tre har hver node enten 0, 1 eller 2 barn

Generiske mekanismer i statisk typede programmeringsspråk

Transkript:

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 Verdisett og operasjoner Lagring under utførelse (mer i kap 7) Run-time tester og spesielle problemer: array/record/union/peker/... Hva vil det si at to variableuttrykk har samme type? Hvordan utføre selve type-sjekkingen? 3/9/2007 1

Generelt om typer Hva er en type En mengde verdier Assosierte operasjoner Statisk/dynamisk typing Hvordan beskrive typer i et program: Bygge opp type-uttrykk Kan lagres i kompilatoren som abstrakte syntaksetrær Blad-nodene er grunntyper Indre noder er type-konstruktører integer +, -, *, /,... real +, -, *, /,... array[0..9] of real a[i+2] record integer i; r.x real x end Kan man gi typer egne navn (type deklarasjoner)? 3/9/2007 2

Type-uttrykk representert som (abstrakt) syntakstre 3/9/2007 3

Array array [<indekstype>] of <komponent-type> Verdier: Mengden av funksjoner fra indeks-typen til komponent-typen Indekstypen: Bare heltal, fra...til? Andre typer: oppramstyper, character Operasjoner: indeksering A[i+2] Ting å tenke på Indeksering uten for grensene Er grensene kompilator-kjente? Implementasjon En-dimensjonale To og flere dimensjoner array [1..4] of array [1..3] of real array [1..4, 1..3] of real Vanlig Fortran 3/9/2007 4

Record/Struct struct { real r; int i } Verdier: Alle verdier av det tilsvarende kartesiske product (real * int) Operasjoner: attributt aksess (dot-notasjon) x.i Ting å tenke på: Lite Implementasjon Layout der attributene ligger etter hverandre r i Attributene får faste relativadresse, som gjør attributt-aksess enkelt 3/9/2007 5

Union-typer union { real r; int i } Verdier: Unionen av alle par (variant, verdi af tilhørende type) Operasjon: aksess (dot-notasjon) u.i Ting å tenke på Hvordan sikre at verdier settes inn og leses av som samme alternativ? Mange språk overlater det til brukeren Pascal har variant-record med angivelse av alternativ Hva med klasser/subklasser? Implementasjon evt. alternativ angivelse Alle alternativer får samme relativ-adresse, gjerne 0 r i 3/9/2007 6

Variant record 3/9/2007 7

Peker-typer ^ integer integer * Pascal C Verdier: Adresser til objekter/verdier av den aktuelle typen Operasjoner: dereferencing, dvs gi objektet/verdien som det pekes til var a: ^integer; var b: integer... a:= &i eller a:= new integer; b:= a^ + b; Ting å tenke på Må test på none (nil, null,...) Avh. av språket blir dereferencing ofte forenklet og slått sammen med dot-notasjon Fri peking til variable kan gi problemer i blokk-strukturerte språk 3/9/2007 8

Peker-typer, eksempel { } ^int a; int b; void p(){ int c;... a = &c;... }... P();... b = a^ + 1 Flere kall som bruker samme areal som P() Løsning: gjør forskjell på Vanlige deklarerte variable (på stakken) Variable generert ved new (på heapen) Og, det er bare den siste typen man kan ha pekere til 3/9/2007 9

Funksjon/prosedyre/metode/subrutine Generelt kan man lage en type av headig på en funksjon var f: procedure (integer): integer; Modula 2 int (*f)(int) C Verdier Alle funksjons-deklarasjoner (med setninger) som stemmer med headingen. Ting å tenke på Vanlige prosedyre/funksjons-deklarasjoner er da å betrakte som konstanter av denne typen Problemer med blokk-struktur og helt frie prosedyre-variable 3/9/2007 10

Funksjon/..., eksempel program var pv: procedure (integer); procedure Q(); var a: integer; procedure P(integer i) a := a + i; end;... pv := p... end;... Q(); pv(3); end a finnes ikke Men: Prosedyrer som parametre til prosedyrer gir ingen slike problemer 3/9/2007 11

Klasser og subklasser Som type brukes klasser mest til å type pekere class A { int i; void f() {...} } class B extends A { int i; void f() {...} } class C extends A { int i; void f() {...} } A ra Klasser ligner på records, med følgende tillegg Kan ha lokale metoder/prosedyrer/funksjoner Kan ha subklasser Objekter kan ofte bare dannes dynamisk, og ingen peking inn i stakken Polymorfi: A-pekere kan også peke til B-objekter og til C-objekter To aksess-måter ved ra.id Vanlig (ikke-virtuell): ra.i og ra.f() gir begge i og f i A, uavh. av hva ra peker på Virtuell aksess: ra.f() gir f i klassen for det aktuelle objekt, som ra peker på Spesielle problemer: merkelig få 3/9/2007 12

Rekursive datatyper ML C 3/9/2007 13

Når er to typer like? var a,b: record int i; double d end var c: record int i; double d end typedef idrecord: record int i; double d end a:= c; a:= d; a:= b d:= e Avgjørende: Finnes det en type-definisjon? Om ikke: Må bruke struktur-likhet var d: idrecord; var e: idrecord; Om de finnes: Kan kreve full navnelikhet, eller en blanding 3/9/2007 14

Eksempel I Grammatikk uten typedef, med strukturlikhet av typer 3/9/2007 15

Eksempel II 1 2 3 3/9/2007 16

Test av at to typer er like (struktur-likhet) 3/9/2007 17

Navne-likhet Alle typer må gis navn, og type-likhet krever samme navn type-dekl Bare navnelikhet (eller samme basaltype) gir likhet 3/9/2007 18

Struktur-likhet, hvor man også tillater navn tilføyes som siste alternativ i strktur-likhets-testen Da skal her t1 og t2 være samme typen: NB: Når man kommer til samme rekursive kallet som man er inne i må man si at det er OK 3/9/2007 19

Type-deklarasjon ekvivalens type alias (Pascal, C) 3/9/2007 20

Sjekking av type-riktighet for uttrykk, program, etc exp exp + exp exp or exp exp [ exp ] 3/9/2007 21

Sjekking av type Her er rekkefølgen ventre -> høyre viktig Kunne også ha -record -pointer -... NB: Må initialisere type-attributtet til error. Forsøker å unngå følgefeil. Gir nå typen på gjeldende dekl av dette navnet 3/9/2007 22

Kommentarer til tabell 6.10 Bruker synboltabell, som man setter inn i (men forblir samme tabell) Mer realistisk enn i tabell 6.9. Der ga en innsetting en helt ny tabell Til gjengjeld blir rekkefølge viktig: Den følger ikke av noen avhengighetsgraf f.eks. for insert(...) Rekkefølge: dybde-først, venstre -> høyre Attributter exp: type type-exp: type Funksjoner Insert(navn,type) --- typeequal(type1, type2) boolean Lookup(navn) type Type-error(tre-node) --- Skriver ut feilmelding, med mindre et subtre har type=error 3/9/2007 23

Diverse Overloading Vanlig for standard-operasjonene Ved egen def. av funskjoner Implementasjon: to greie muligheter Legge parametertypene inni navnet La lookup levere en mengde med alternativer Type-konvertering Kan gi problemer sammen med overloading Polymorfisme void f(int i, double d) void f(double d, int i) f(i1,i2) 3/9/2007 24