Semantisk Analyse del III

Like dokumenter
Datatyper og typesjekking

Datatyper og typesjekking

Datatyper og typesjekking

Datatyper og typesjekking

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

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)

Runtimesystemer - II. Funksjoner som parametere. Virtuelle metoder

Skal bindes opp til en deklarasjon av samme navn

Skal bindes opp til en deklarasjon av samme navn

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

Runtime-omgivelser Kap 7 - I

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

Runtimesystemer Kap 7 - I

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

Runtime-omgivelser Kap 7 - II

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

Runtimesystemer Kap 7 - I

Generiske mekanismer i statisk typede programmeringsspråk

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

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

Diverse eksamensgaver

Dagens tema: Datastrukturer

Dagens tema: Kjøresystemer II

UNIVERSITETET I OSLO

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

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

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

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

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

2 Om statiske variable/konstanter og statiske metoder.

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.

Dagens tema: Sjekking

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

UNIVERSITETET I OSLO

2 Om statiske variable/konstanter og statiske metoder.

Litt om Javas class-filer og byte-kode

MED SVARFORSLAG UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet

UNIVERSITETET I OSLO

Obligatorisk Innlevering 2

Runtime- systemer del III

UNIVERSITETET I OSLO

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

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

INF1000: Forelesning 7

UNIVERSITETET I OSLO

Generiske mekanismer i statisk typede programmeringsspråk

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

Programmeringsspråket C Del 3

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

INF1000: Forelesning 7. Konstruktører Static

Programmeringsspråket C Del 3

Programmeringsspråket C Del 3

Javas klasse-filer, byte-kode og utførelse (og litt om C# sin CIL-kode)

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

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

Generiske mekanismer i statisk typede programmeringsspråk

Programmeringsspråket C Del 3

Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

NOTAT (pensum!) Javas klasse-filer, byte-kode og utførelse

Kjøresystemer. Hva er et kjøresystem? Den abstrakte maskinen SIMPLESEM (2.6) Klassifisering av språk: Parametre (2.7.7) Statiske språk (

Forkurs INF1010. Dag 2. Andreas Færøvig Olsen Tuva Kristine Thoresen

Litt mer om uttrykk: ++ og -- INF1000 : Forelesning 4. Oppgave. Blokker. 0 udefinert udefinert. Alternativ 2 Postfiks-operator

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

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

INF5110. Oblig 2 presentasjon

IN våren 2018 Tirsdag 16. januar

Plan: Typer (Ghezzi&Jazayeri kap.3 frem til 3.3.1) Funksjonelle språk. Innføring i ML. typer enkle funksjoner (Fortsetter med ML i to uker til)

Statisk semantisk analyse - Kap. 6

IN 147 Program og maskinvare

UNIVERSITETET I OSLO

Forelesere. Velkommen til programmeringsspråkenes verden IN211. Praktiske opplysninger. Faglige forutsetninger. Ragnhild Kobro Runde

INF våren 2017

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

IN 211 programmeringsspråk H 99

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

Statisk semantisk analyse - Kap. 6

IN 147 Program og maskinvare

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

INF Oblig 2 semantikksjekk og kodegenerering

Runtimesystemer del III

UNIVERSITETET I OSLO

Del 4 Noen spesielle C-elementer

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

Del 3: Evaluere uttrykk

INF2220: Forelesning 3. Map og hashing Abstrakte datatyper (kapittel 3.1) Map (kapittel 4.8) Hashing (kapittel 5)

INF2220: Forelesning 3

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

Repitisjonskurs. Arv, Subklasser og Grensesnitt

IN våren 2019 Onsdag 16. januar

PG4200 Algoritmer og datastrukturer Forelesning 5 Implementasjon av lister

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

Forelesning inf Java 5

Forelesning inf Java 5

Kapittel 1 En oversikt over C-språket

Transkript:

Semantisk Analyse del III Typesjekking Kapittel 6.4 08.03.2013 1

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? 08.03.2013 2

Generelt om typer En type er en mengde verdier, sammen med et sett av assosierte operasjoner integer +, -, *, /, real +, -, *, /, array[0..9] of real record integer i; real x end a[i+2] r.x 08.03.2013 3

Array array [ <indekstype> ] of <komponent-type> Verdier: Mengden av funksjoner fra indeks-typen til komponent-typen Indekstypen: Bare heltall, 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 08.03.2013 4

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

Union-typer union { real r; int i } Verdier: Unionen av alle par (variant, verdi av 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 08.03.2013 6

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

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 08.03.2013 8

Funksjon/prosedyre/metode/subrutine Generelt kan man lage en type av heading 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 08.03.2013 9

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 08.03.2013 10

Klasser og subklasser A Som type brukes klasser mest til å type pekere class A { int i; void f() {} } class B extends A { int i; void f() {} } 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å class C extends A { int i; void f() {} } B A ra C 08.03.2013 11

Rekursive datatyper ML C 08.03.2013 12

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) 08.03.2013 13

Neste forelesning: Tirsdag 12. mars (seminarrom Sed) TYPE-LIKHET OG TYPE-SJEKKING OPPGAVE 6.20 OG 6.21 05.03.2013 14