Skal bindes opp til en deklarasjon av samme navn

Like dokumenter
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:

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

Datatyper og typesjekking

Datatyper og typesjekking

Datatyper og typesjekking

Semantisk Analyse del III

Anatomien til en kompilator - I

Anatomien til en kompilator - I

Diverse eksamensgaver

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)

Dagens tema: Kjøresystemer II

Runtime-omgivelser Kap 7 - I

Runtimesystemer Kap 7 - I

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

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

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

Semantisk Analyse del I

Runtimesystemer Kap 7 - I

UNIVERSITETET I OSLO

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

INF Oblig 2 semantikksjekk og kodegenerering

UNIVERSITETET I OSLO

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

Runtimesystemer - II. Funksjoner som parametere. Virtuelle metoder

INF5110. Oblig 2 presentasjon

Dagens tema: Sjekking

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

Semantikk. Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7) Semantikk. Semantikk. En måte å svare på: gi semantikken til språket!

IN 211 programmeringsspråk H 99

Hjemmeeksamen 2 i INF3110/4110

Runtime-omgivelser Kap 7 - II

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

UNIVERSITETET I OSLO

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

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

MED SVARFORSLAG UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet

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

Obligatorisk Innlevering 2

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

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

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

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

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

Oblig 2 - Simpila. INF Kompilatorteknikk. Våren Typesjekking, sjekking av bruk av navn og blokkstrtuktur i språk.

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

Programmeringsspråket C Del 3

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

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

Programmeringsspråket C Del 3

Programmeringsspråket C Del 3

Programmeringsspråket C Del 3

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

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

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

Løsningsforslag til eksamen i IN 211 høsten 2002

UNIVERSITETET I OSLO

Statisk semantisk analyse - Kap. 6

UNIVERSITETET I OSLO

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

Dagens tema: Mer av det dere trenger til del 1

Statisk semantisk analyse - Kap. 6

UNIVERSITETET I OSLO

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

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

2 Om statiske variable/konstanter og statiske metoder.

Eksekveringsrekkefølgen (del 1) Oppgave 1. Eksekveringsrekkefølgen (del 2) Kommentar til oppgave 1. } // class Bolighus

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

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

Dagens tema: Sjekking (obligatorisk oppgave 3)

Generiske mekanismer i statisk typede programmeringsspråk

IN 147 Program og maskinvare

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

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

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

Scanning - I Kap. 2. Hva scanneren gjør

Litt om Javas class-filer og byte-kode

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

Oversikt Kompilering Syntaksanalyse Java Feilsjekking Oppsummering

Om oppgaveteksten på noe punkt er uklar eller upresis, kan du gjøre egne presiseringer. Formulér i så fall disse tydelig i oppgavebesvarelsen din.

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

Typisk: Kan det være både nøkkelord og navn, så skal det ansees som nøkkelord

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

Typisk: Kan det være både nøkkelord og navn, så skal det ansees som nøkkelord

2 Om statiske variable/konstanter og statiske metoder.

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

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

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

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

IN våren 2018 Tirsdag 16. januar

IN våren 2019 Onsdag 16. januar

INF1000 : Forelesning 1 (del 2)

Om Simula 67. Ekstraforelesning for IN105, 26/ Ole-Johan Dahl

Kap.4 Funksjoner. Tre viktig ting ifm. funksjoner: parameter (input) oppskrift (body) for å beregne resultat (output)

Transkript:

Symboltabellen Programmeringsspråk har Deklarasjoner, som definerer navn Konstant-deklarasjon Type-deklarasjon Variabel-deklarasjon Prosedyre-deklarasjon Klasse-deklarasjon Bruksforekomster av navn, f.eks. i uttrykk Skal bindes opp til en deklarasjon av samme navn Symboltabellen Holder orden på de deklarasjons-navn som gjelder på det stedet man er i programmet Har funksjonen lookup(bruks-navn), som gir den deklarasjon, som navnet skal bindes til (og hvis dette ikke lykkes: udeklarert) 3/23/10 1

Symboltabellen II To hovedfilisofier 1. Tradisjonell tabell lookup(id) insert(id) delete(id) Brukes til oppdatere tabellen ved passering av dekl. og ved inngang/utgang av blokker 2. Selve syntakstreet Look-up blir da en lete-prosess { int i;... double d; void p(...) { int i;... } int j } Insert/delete blir implisitte (alt etter hvordan man flytter seg i treet) Kan være vanskelig å få lookup effektiv 3/23/10 2

Ved bruk av tradisjonell tabell er hashing en grei effektiviserings-metode I pakkene: også info om deklarasjonen For senere: Nye pakker settes inn først i listen { } int temp; int j; real i void size(...) {... } 3/23/10 3

Eksempler 3/23/10 4

Varianter av blokkstruktur Hva slag konstruksjoner kan ligge inne i hverandre program, klasse, prosedyre,... Hvor dyb kan blokkstrukturen bli? Må navne angis (ikke nødvendigvis deklareres) før de brukes? Hva kan aksesseres utenfra ved <peker>.<egenskap>? Algol, Simula C, C++ Pascal Java, C# 3/23/10 5

Hashing med stakk for blokkstruktur og tradisjonell tabell Hvis navne må angis før bruk: deklarasjoner settes inn etter hvert Ellers: to gjennomløp Ved blokkstart: Alle blokkens deklarasjoner settes inn 3/23/10 6

Bruk av syntakstre til lookup lookup(n){ k=nåværende blokk do {let etter n i dekl. til blokk k}; k=k.sl until funnet eller k==none } her brukes i, P her brukes i, P,Q her brukes i, P, Q, j 3/23/10 7

Ved bruk av syntakstre til lookup Ved deklarasjon før bruk Man gjør oppslagene etter hvert som treet bygges opp Ett gjennomløp Ellers Bygg ferdig hele treet i ett gjennomløp Gå gjennom treet en gang til og gjør lookup for hver bruksforekomst (ut fra det stedet forekomsten er) 3/23/10 8

En mellomløsning Samler deklarasjonene i hver blokk i hver sin tabell Bruker hashing i hver tabell Bruker statisk link pekere, og implementerer lookup ved leting Nåværende blokk sl sl 3/23/10 9

Definisjoner utenfor skop For å implementere dette (og lignende ting, som f.eks. remote aksess) må man ha deklarasjonene for hver blokk i egne tabeller A a;... a.f();... class A{ int f({...}; bool b; void g(){...} } 3/23/10 10

Scope - I Sequential <> Collateral 3/23/10 11

Scope - II 3/23/10 12

Dynamisk skop: binde navn via dynamisk link Bokens eksempel void Y(){ int i; void p(){ int i;... Q();... } void Q(){... i = 5;... }... P();... } hvilken i i i = 5? 3/23/10 13

Navnebinding etc. Skrevet ut som attributtgrammatikk Brukt til å definere statisk semantikk, ikke til implementasjon exp: symtab arvet nestlevel arvet err syntetisert declist: intab arvet decl: outtab syntetisert nestlevel arvet insert(tab, name, l) leverer ny tabell isin(tab, name) ja/nei lookup(tab, name) gir nivået 3/23/10 14

3/23/10 15

3/23/10 16

3/23/10 17

Noen siste punkter omkring symboltabellen Implisitte deklarasjoner (Fortran) Navnebinding i kompilatoren gir ikke endelig dynamisk binding Kan man ha samme navn på f.eks. variabel og type? Overloading Får lov å bruke samme navn på flere ting (også i samme blokk) Må da kunne skille på noe annet, gjerne antall/type av parametre i + j integer + r + s real + void f(int i) void f(int i, int j) void f(double r) 3/23/10 18

Regler 1. Ikke samme navn på to i samme let-blokk 2. Navne må deklareres 3. Innermost binding 4. sequential deklarasjon 3/23/10 19