Anatomien til en kompilator - I

Like dokumenter
Anatomien til en kompilator - I

Runtimesystemer Kap 7 - I

Runtime-omgivelser Kap 7 - I

Runtimesystemer Kap 7 - I

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

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

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

Skanning del I INF /01/15 1

Skanning del I. Kapittel 2 INF 3110/ INF

UNIVERSITETET I OSLO

Runtimesystemer - II. Funksjoner som parametere. Virtuelle metoder

Datatyper og typesjekking

UNIVERSITETET I OSLO

Datatyper og typesjekking

Datatyper og typesjekking

Semantisk Analyse del III

Datatyper og typesjekking

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

Runtime-omgivelser Kap 7 - II

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

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

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)

Diverse eksamensgaver

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Semantisk Analyse del I

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

Fiktiv eksamensbesvarelse IN 211 høsten 2001

MED SVARFORSLAG UNIVERSITETET I OSLO

Skal bindes opp til en deklarasjon av samme navn

UNIVERSITETET I OSLO

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

Statisk semantisk analyse - Kap. 6

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

Statisk semantisk analyse - Kap. 6

Skal bindes opp til en deklarasjon av samme navn

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

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

Generiske mekanismer i statisk typede programmeringsspråk

Dagens tema: Kjøresystemer II

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

Dagens tema: Sjekking

UNIVERSITETET I OSLO

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

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

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

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

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

Syntax/semantics - I INF 3110/ /29/2005 1

Kap.4, del 2: Top Down Parsering Kap. 5, del 1: Bottom Up Parsing INF5110, 7/ Legger ut en oppgave til kap. 4 (se beskjed).

Kap.4 del I Top Down Parsering INF5110 v2005. Arne Maus Ifi, UiO

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

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

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

INF1000: Forelesning 7

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

Kap. 4 del I Top Down Parsering INF5110 v2006. Stein Krogdahl Ifi, UiO

INF2820 Datalingvistikk V2017 Forelesning 2, 23.1 Jan Tore Lønning

Runtime- systemer del III

Dagens tema Grundig repetisjon og utdyping: Syntaks kontra semantikk

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

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

INF1000: Forelesning 7. Konstruktører Static

Oversikt Kompilering Syntaksanalyse Java Feilsjekking Oppsummering

Kap. 4: Ovenfra-ned (top-down) parsering

Hva er syntaks? En overskrift i en norsk avis: Dagens tema Grundig repetisjon og utdyping:

Dagens tema: 12 gode råd for en kompilatorskriver

UNIVERSITETET I OSLO

Velkommen til INF Kompilatorteknikk

INF225 høsten 2003 Prosjekt del 4: kodegenerering

INF2820 Datalingvistikk V2015. Jan Tore Lønning

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

Kap. 5, del 2 LR(1)- og LALR(1)-grammatikker INF5110 V2008

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

Hjemmeeksamen 2 i INF3110/4110

Oversikt. Praktisk. Litt om meg. Obligatorisk oppgave 1 - Kort om oppgaven og verktøyene. Fredrik Sørensen OMS-gruppen, IfI.

Kap. 5, Del 3: INF5110, fra 1/3-2011

Dagens tema: Regulære språk og uttrykk

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

INF2820 Datalingvistikk V2012. Jan Tore Lønning

Litt om Javas class-filer og byte-kode

Kap. 5 del 2: LR(1)- og LALR(1)-grammatikker INF5110 V2005. Stein Krogdahl, Ifi, UiO

Obligatorisk Innlevering 2

Kap. 5, del 1: Parsering nedenfra-opp (Bottom up parsing) INF5110. Stein Krogdahl Ifi, UiO

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

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

Objekter og referanser

Velkommen til INF5110 Kompilatorteknikk

Kap. 4, del I: Top Down Parsering Pluss oppgave til kapittel 3 INF5110 V2008

INF2820 Datalingvistikk V2016. Jan Tore Lønning

Transkript:

Anatomien til en kompilator - I 5/22/2006 1

Framgangsmåte for automatisk å lage en scanner Beskriv de forskjellige token-klassene som regulære uttrykk Eller litt mer fleksibelt, som regulære definisjoner Omarbeid dette til en NFA (non-deterministic finite automaton) Er veldig rett fram Omarbeid dette til en DFA (deterministic finite automaton) Dette kan gjøres med en kjent, grei algoritme En DFA kan uten videre gjøres om til et program 5/22/2006 2

DFA -1 Funksjonen T: SxΣ -> S er ikke fullstendig definert Denne utvidelsen (med en feiltilstand) er underforstått 5/22/2006 3

NFA Kan ofte være lett å sette opp, spesielt ut fra et regulært uttrykk Kan ses på som syntaks-diagrammer NFA ikke greit å gjøre til algoritme DFA beskriver samme språk 5/22/2006 4

Thomson-konstruksjon I (Ethvert regulært uttrykk skal bli automat på denne formen: a: a rs: ε: ε 5/22/2006 5

Thomson-konstruksjon II r s: r*: 5/22/2006 6

Transformasjon fra NFA: M til DFA: M ALGORITME 1. Lag start-tilstanden i M som ε-tillukningen av {start-tilstanden i M} 2. Om S er en tilstand i M, så gjelder: a S ε-tillukning(s a ) (Må eventuelt opprette ny M -tilstand) 3. Gjenta steg 2 for alle S i M og alle a i alfabetet til M ikke får flere nye tilstander. 4. De aksepterende tilstander i M er de S i M som inneholder minst én av de aksepterende tilstander i M. 5/22/2006 7

Eksempel 2.16 ab a 5/22/2006 8

Eksempel 2.17 letter (letter digit)* 5/22/2006 9

Eksamen 2005 a) Bruk Thompson s konstruksjon til å lage en NFA for det regulære uttrykket (aa b)*(a cc)*b) b) Skriv følgende NFA ut som et regulært uttrykk: c) Gjør om NFAen fra pkt b) til en DFA. 5/22/2006 10

Thomson-konstruksjon (aa b)*(a bb)* 5/22/2006 11

Fra NFA til DFA 2,3 b a a 4 b a 1,3 b 3 1,3, 4 b a b 5/22/2006 12

Attributt-grammatikker Attributter er variable knyttet til nodene i parseringstreet Hver semantisk regel er knyttet til en produksjon Arvede/syntetiserte attributter Deres verdier definert ved semantiske regler 5/22/2006 13

5/22/2006 14

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? 5/22/2006 15

Sjekking av type-riktighet for uttrykk, program, etc exp exp + exp exp or exp exp [ exp ] 5/22/2006 16

Sjekking av type vha attributtgrammatikk 5/22/2006 17

6.21 5/22/2006 18

5/22/2006 19

Grammar Rule fun-decls fun id ( var-decls ): type-exp ; body Semantic Rule fun-decls.type = maketypenode (fun, var-decls.types, type-exp.type) exp id ( exps ) if isfuntype(lookup(id.name)) and exps.types = parametertypesof(id.name) then exp.type = lookup(id.name) else type-error Forutsetter at var-decls.types defineres som en liste av de typer, som de enkelte vardecl bidrar med; exps.types defineres som listen av typene til de enkelte exp i listen av exp; funksjonen parametertypesof gir tilsvarende listen av de typer som finnes i TypeNode for funksjonen 5/22/2006 20

Eksamensoppgave 2004 class class name superclass { decls } decls decls ; decl decl decl variable-decl decl method-decl method-decl type name ( params ) body type int bool void superclass name Metoder med samme navn som klassen er konstruktører, og det gjelder følgende regel: Konstruktører må være spesifisert med typen void. 5/22/2006 21

5/22/2006 22

Lagerorganisering Typisk organisering under utførelse dersom et programmeringsspråk har alle slags data (statisk, stakk, dynamisk) Typisk organisering av data for et prosedyrekall (aktiveringsblokk) Det er gjerne ut fra plasseringen her man karakteriserer språk til være statisk organisert stakk-organisert heap/dynamisk organisert 5/22/2006 23

Aktiveringsstakk Aktiverings-blokkene kan organiseres som en stakk. Kreves om man tillater rekursive kall Return address Program-adressen man er kalt fra control link Angir kallerens fp ( dynamisk link ) frame pointer Peker på fast sted i den aktuelle aktiveringsblokkken stack pointer Angir grensen mellom brukt og ledig lagerareal 5/22/2006 24

Prosedyrer inne i prosedyrer Nestede prosedyrer Nested klasser (inner classes) kan behandles på samme måte. 5/22/2006 25

Et første forsøk Kontekstvektor ( display ) Vi trenger noe ekstra (aksess-link/statisk link) Hvordan kan vi aksessere n i p? Går altid til aktuell utgave av tekstlig omgivelse 5/22/2006 26

Eksempel med flere nivåer Programblokkene får da et blokk-nivå fp.al.al.x diff i blokknivå 5/22/2006 27

Oppgave 3.b (2004) fp.al.al.x void R() { int x;...; void Q() {...; void P() {...; x := 2;... } } } 5/22/2006 28

Oppg 7.10d 5/22/2006 29

5/22/2006 30

Impl. av virtuelle metoder Virtuell-tabell pekeren har relativ-adresse som kan beregnes av kompilatoren Pekeren til virtuell-tabellen ligger ikke først i objektet, da bare objekter med virtuelle funksjoner har en virtuell-tabell. 5/22/2006 31

7.13 A-objekt a A::f 0 vt A::g 1 B-objekt a vt b C-objekt a vt b c B::f A::g B::f C::g 0 1 0 1 5/22/2006 32

Oppg. 3c (2004) 5/22/2006 33

Parameteroverføring by value Hver formell parameter blir implementert som en lokal variabel i prosedyren Ved kallet gjøres formell_var = aktuell_var by reference Overfører en peker til den aktuelle variable by value-result Det allokeres en lokal varabel, som ved by value by name Ved kallet gjøres formell_var = aktuell_var Ved retur utføres aktuell_var = formell_var Den aktuelle parameteren blir substituert inn for den formelle ( nesten rent tekstlig: den aktuelle parameteren beholder sitt skop, så altså ikke makro-ekspansjon) 5/22/2006 34

7.16 by value by reference 0 1 2 0 1 0 2 0 by value-result 1 0 2 0 1 1 0 0 by name 2 1-1 0 5/22/2006 35