Semantisk Analyse del I

Like dokumenter
Statisk semantisk analyse - Kap. 6

Statisk semantisk analyse - Kap. 6

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Diverse eksamensgaver

UNIVERSITETET I OSLO

MED SVARFORSLAG UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet

UNIVERSITETET I OSLO

Anatomien til en kompilator - I

INF5110 V2012 Kapittel 4: Parsering ovenfra-ned

INF5110, onsdag 19. februar, Dagens tema: Parsering ovenfra-ned (top-down)

Anatomien til en kompilator - I

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

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

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

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

INF5110 V2013 Stoff som i boka står i kap 4, men som er generelt stoff om grammatikker

Dagens Tema: Grammatikker Kap. 3 i K. C. Louden

Hovedstoffet i kap 4: 16. Februar Ifi, UiO

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

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

INF 5110, 3. februar Dette foilheftet: Kapittel 3

Spørsmål og svar rundt oblig 1 og verktøy

Dagens tema Syntaks (kapittel Komp. 47, kap. 1 og 2)

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

Skal bindes opp til en deklarasjon av samme navn

Litt om kompilering og interpretering. Dagens tema Syntaks (kapittel Komp. 47, kap. 1 og 2) Syntaks og semantikk

Hvor er vi nå - kap. 3 (+4,5)? Forenklet skisse av hva en parser gjør PARSER. Kontekstfrie grammatikker og syntaksanalyse (parsering)

INF5110. Oblig 2 presentasjon

Dagens Tema: Grammatikker

INF Oblig 2 semantikksjekk og kodegenerering

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

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

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

Datatyper og typesjekking

Dagens Tema: Grammatikker Kap. 3 i K. C. Louden

Kontekstfrie grammatikker og syntaksanalyse (parsering)

Obligatorisk Innlevering 2

Dagens Tema: Grammatikker

UNIVERSITETET I OSLO

Obligatorisk Oppgave 1

Kap. 5, Del 2: SLR(1), LR(1)- og LALR(1)-grammatikker INF5110 V2009

Hovedstoffet i kap 4:

INF januar Forelesninger fremover:

Hjemmeeksamen 2 i INF3110/4110

Dagens tema: Sjekking

Datatyper og typesjekking

Datatyper og typesjekking

INF / Kap. 5, Del 2 Stein Krogdahl, Ifi, UiO

UNIVERSITETET I OSLO

Dagens Tema: Grammatikker Kap. 3 i K. C. Louden

Syntaksanalyse. Skanner (repetisjon) Parsering top-down bottom-up LL(1)-parsering Recursive descent Forutsetninger. IN 211 Programmeringsspråk

Datatyper og typesjekking

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

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

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

Oversikt Kompilering Syntaksanalyse Java Feilsjekking Oppsummering

Hjemmeeksamen 1 i INF3110/4110

Obligatorisk Oppgave 1

Obligatorisk oppgave 1 INF Kompilatorteknikk Våren 2012 Frist mandag 19. mars

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

INF /2, 2015 Kap. 5, Del 2 Stein Krogdahl, Ifi, UiO

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

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

INF5110, tirsdag 5. februar, Dagens temaer: - Oppgaver til kap. 3 Svar ligger på slutten av foilene, men forsøk deg først selv!!

Skal bindes opp til en deklarasjon av samme navn

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

Kap. 5, Del 2: INF / (og 2/3 og 3/3)

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

UNIVERSITETET I OSLO

Dagens tema: Mer av det dere trenger til del 1

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

Kap. 5, Del 2: SLR(1), LR(1)- og LALR(1)-grammatikker INF /2-2011

Kap. 8 del 1 kodegenerering INF5110 Vår2007

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

UNIVERSITETET I OSLO

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

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

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

Syntax/semantics INF 3110/ /8/2004 1

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.

Oversikt. INF5110 Obligatorisk Oppgave 1. Andreas Svendsen SINTEF

Pensumoversikt - kodegenerering. Kap. 8 del 1 kodegenerering INF5110 v2006. Hvordan er instruksjonene i en virkelig CPU? Arne Maus, Ifi UiO

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

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

INF3110 Programmeringsspråk

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

Oppgaver til INF 5110, kapittel 4, med svarforslag Gjennomgått torsdag 14. febr Disse foilene er justert 15/2, kl. 11

MED SVARFORSLAG UNIVERSITETET I OSLO

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

Løsningsforslag til hjemmeeksamen 2 i INF3110/4110

MAT1030 Plenumsregning 1

Kontekstfrie grammatikker og syntaksanalyse (parsering)

Oppgaver til INF 5110, kapittel 4, med svarforslag Gjennomgås tirsdag 21. febr. 2012

MAT1030 Diskret Matematikk

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

Transkript:

Semantisk Analyse del I Attributtgrammatikker Kapittel 6.1-6.2 26.02.2013 1

Statisk semantisk analyse kapittel 6: Innhold Generelt om statisk semantisk analyse Attributt-grammatikker (kapittel 6.1-6.2) Symboltabell (kapittel 6.3) Datatyper og typesjekking (kapittel 6.4) 26.02.2013 2

Generelt om semantisk analyse Formål: sjekke alle krav i språkdefinisjonen som kan sjekkes før utførelsen. ikke naturlig sjekkes under syntaktisk analyse. Typisk: at bruk av navn er konsistent med deres deklarasjon. at typen av (sub)-uttrykk stemmer med operasjonene. Men: Ikke alt kan sjekkes før utførelsen. Stor forskjell på språk med og uten typer på variable og parametre. 26.02.2013 3

En drøm Beskrivelse av språkets statiske semantikk Sem-yacc Men: Mangler standard beskrivelsesspråk. Komplisert input til semantisk sjekker. Alltid mange ad-hoc regler. Semantisk sjekker for det aktuelle språk Derfor: Ser på generelle metoder. Må programmeres spesielt i hvert tilfelle. 26.02.2013 4

ATTRIBUTTGRAMMATIKKER 26.02.2013 5

Attributter En attributt er en egenskap ved et språkbegrep. Eksempler: Datatypen til en variabel. Verdien til ett uttrykk. Lokasjonen til en variabel i minnet. Objekt-koden til en metode. Antall signifikante sifre i et tall. Statiske attributter: Kan beregnes før utførelsen Dynamiske attributter: Må beregnes under utførelsen For attributt-grammatikker er alle attributter statiske, og de er definert i tilknytning til grammatikken for språket 26.02.2013 6

Attributt-grammatikker Attributter er variable knyttet til nodene i parseringstreet. Deres verdier er definert ved semantiske regler. Hver semantiske regel er knyttet til en produksjon i grammatikken. Eksempel: 26.02.2013 7

Attributt-grammatikker Gitt en grammatikk på ren BNF-form For hvert grammatikk-symbol X (terminal eller ikke-terminal) skal det være gitt en mengde (navnede) attributter. Attributt-mengdene for de forskjellige symbolene kan generelt være helt forskjellige, men har ofte mye felles. Attributtene er ment å materialisere seg som variable knyttet til nodene i et parseringstre. Attributtet a til noden X skrives X.a. Attributtene er definert ved at det til hver regel er knyttet en likning på formen: X 0 -> X 1 X 2 X 3 X1 a 1 X2 X 0 a 1 a 2 X 3 a 1 a 1 a 2 arvet attributt X1 a 1 a X2 X 0 a 1 a 2 X 3 a 1 a 1 a 2 arvet attributt syntetisert attributt 26.02.2013 9

Syntetiserte attributter NB: Hvert attributt må velges til enten å være syntetisert eller arvet. arvede Avhengighet i en S-attributt-grammatikk Trykkfeil: A.a kan også være avhengig av A.b dersom b er et arvet attributt. X syntetiserte 26.02.2013 10 X1 X2 A Mulig avhengighet for syntetisert attributt X3

Arvede attributter An attribute that is not synthesized is called an inherited attribute. Heller: et attributt sies å være arvet, når det defineres for et symbol på høyresiden av de produksjoner det opptrer i A -> X 1 X 2 X 3 X 2.a = A.b+X 1.c+X 3.d c 26.02.2013 11 AA...... AX1 AX3 a AX2 b d

Man kan gjerne tenke i abstrakte syntakstrær flertydige grammatikker Attributter exp: val number: val (fra scanneren) terminaler: - 26.02.2013 12

Attr.-grammatikk som bygger abstrakt syntakstre Attributter: tree (for exp, term og factor) lexval (for number) Merk: det abstrakte syntakstreet bygges ut fra at vi har det konkrete parseringstreet 26.02.2013 13

Grammatikk med arvede attributter Attributter: dtype (for type, varlist, id) 26.02.2013 15

Eksempel med arvede og syntetiserte attributter Attributter: val (for based-num, num og digit) base (for basechar og num) 26.02.2013 17

Eksempel based-num forts. 26.02.2013 18

Konsistens og beregnbarhet Alle attributter er enten arvede eller syntetiserte (Men OK at basechar.base er syntetisert, mens num.base er arvet siden dette er to forskjellige attributter.) Alle attributter må være definerte. Gjøres ved at innen hver produksjon må: alle syntetiserte attributter i venstresiden være definert. alle arvede attributter i høyresiden være definert. det ikke være noen lokale avhengighets-løkker. Siden alle attributter er enten arvede eller syntetiserte, er hvert attributt i et parseringstre definert en og bare en gang. 26.02.2013 19

Avhengighetsgraf for based-num - eksempelet Mulig beregningsrekkefølge 26.02.2013 20

Omskriving fra arvede til syntetiserte attributter Denne ga arvede attributter: Nytt forslag: 26.02.2013 21

Med ny grammatikk: er egentlig arvede, men kan gjøres ferdige fra var-list og decl 26.02.2013 22

Løkker i avhengighets-grafen Ikke i noe syntakstre må det være løkker i avhengighetsgrafen! Generelt er dette vanskelig å garantere. Man kan sjekke det etter at treet er bygget. Om ikke løkker: Finn topologisk sortering som gir brukbar rekkefølge. I praksis: Man overbeviser seg på forhånd om at det ikke kan bli løkker i noe syntakstre. Forhåndsbestemmer en rekkefølge for beregning. 26.02.2013 23

BEREGNINGSALGORITMER 26.02.2013 24

Eksempel: type-grammatikk 26.02.2013 25

Eksempel: beregning for base-grammatikk 26.02.2013 26

Alternativ til EvalWithBase For basechar er den base, ellers er den val Mangler teknisk en parameter, men uten betydning Ny filosofi Returverdier er syntetiserte attributter Parametere er arvede attributter 26.02.2013 27

For beregning under parsering venstre > høyre Trykkfeil: Krever også X 0.a 1,... X o.a k må alle være arvede attributter (ellers kan det oppstå løkker, og man kan få høyre->venstre avhengigheter 26.02.2013 28

Beregning av L-attribut-gramm. under recursive descent parsering aa A sa A ->... B C D... B C D int A(aA){... if <A-> BCD skal velges> then { int ab,sb,ac,sc,ad,sd ab = fb(aa); sb = B(aB); ac = fc(aa,ab,sb); sc = C(aC); ad = fd(aa,ab,sb,ac,sc); sd = D(aD); return ga(aa,ab,sb,ac,sc,ad,sd); } else... Beregning av sa } ab sb ac sc ad sd 26.02.2013 30

Neste forelesning: Fredag 1. mars OPPGAVER: 6.5, 6.7, 6.13 + DE NESTE SIDENE 26.02.2013 31

26.02.2013 32

26.02.2013 33

Eksamen 2007 oppgave 2b decls decls ; decl decl decl var-decl function-decl var-decl type id = expression function-decl type id ( parameter? ) body type int bool void parameter type id type func id call id ( id? ) Ord i kursiv er ikke-terminaler, ord og tegn i fet skrift er terminal-symboler. id representerer et navn. En parameter er enten en verdi overført by value eller en funksjon uten parameter. Den enkle reglen i dette språket er at en funksjon med en by value -parameter bare kan kalles med en variabel som aktuell parameter (altså ikke med et generelt uttrykk), mens en funksjon med en funksjonsparameter bare kan kalles med en aktuell parameter som er en funksjon uten parametere. Typen til den aktuelle parameteren skal i begge tilfelle være samme type som den formelle. En funksjon uten parameter må kalles uten aktuell parameter. 26.02.2013 34

Fyll ut de tomme felter i følgende attributtgrammatikk slik at attributtet ok for call er true hvis kallet er gjort ifølge disse regler, ellers false. Du kan anta at det finnes semantiske regler som legger navn inn i symboltabellen. Du kan også anta at lookup(id.name).kind gir verdien var for en variabel og func for en funksjon, lookup(id.name).type er typen til det som id.name er navnet på (funksjon, variabel eller parameter) og at lookup(id.name).has_parameter gir verdien yes eller no for en funksjon (med navnet id.name) avhengig av om funksjonen har en parameter eller ikke. Det er ikke behov for å sjekke om funksjonsnavnet (id) i en call-setning faktisk er deklarert (du kan altså anta at det allerede er gjort ved andre mekanismer). 26.02.2013 35

26.02.2013 36

Eksamen 2010 oppgave 3a Det følgende er en del av grammatikken for et språk med funksjoner. func type func id signature stmt-list type int type bool stmt-list stmt-list stmt stmt-list stmt stmt assign-stmt stmt if-stmt stmt return-stmt return-stmt return exp exp id exp id + id exp true exp false Fyll ut de tomme felter (markert med *) i attributtgrammatikken for de relevante deler av grammatikken på neste side slik at attributtet ok for return-stmt er true hvis typen til returuttryket exp er det samme som typen til funksjonen, ellers false. Du kan anta at lookup-kind(id.name) leverer den type, som er lagt inn i symboltabellen ved deklarasjonen av variablen med navnet id.name. 26.02.2013 37

26.02.2013 38