Statisk semantisk analyse - Kap. 6

Like dokumenter
Semantisk Analyse del I

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

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

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

Datatyper og typesjekking

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

Datatyper og typesjekking

Anatomien til en kompilator - I

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

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

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

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

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

Obligatorisk Oppgave 1

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

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

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

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

Diverse eksamensgaver

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

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

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

INF5110. Oblig 2 presentasjon

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

INF januar Forelesninger fremover:

Obligatorisk Oppgave 1

Obligatorisk Innlevering 2

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

Kontekstfrie grammatikker og syntaksanalyse (parsering)

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

Stoff som i boka står i kap 4, men som er. 10. Februar Ifi, UiO

Hjemmeeksamen 2 i INF3110/4110

Forelesning 33. Repetisjon. Dag Normann mai Innledning. Kapittel 11

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

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

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.

MAT1030 Diskret matematikk

Innledning. MAT1030 Diskret matematikk. Kapittel 11. Kapittel 11. Forelesning 33: Repetisjon

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

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

UNIVERSITETET I OSLO

Rekker (eng: series, summations)

Syntax/semantics INF 3110/ /8/2004 1

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

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

Hjemmeeksamen 1 i INF3110/4110

Kap. 5, del 1: Parsering nedenfra-opp (Bottom-up parsering) INF / Stein Krogdahl Ifi, UiO

2/24/2012. Context-Free Grammars. I dag. Avledning. Eksempel: grammar1 PARSING. Jan Tore Lønning

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

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

Dagens tema: Sjekking

Transkript:

Statisk semantisk analyse - Kap. 6 Generelt om statisk semantisk analyse Attributt-grammatikker Symboltabell Datatyper og typesjekking 3/15/11 1

Generelt om semantisk analyse Oppgave: Sjekke alle krav i språkdefinisjonen som kan sjekkes før utførelsen ikke naturlig sjekkes under syntaktisk analyse Merk Ikke altid klart hvor grensen mellom syntaktisk/semantisk sjekk går (eller bør velges ) if a then... Må godkjennes syntaktisk if a+b then...?? 3/15/11 2

Poenger og begreper Typiske ting som sjekkes at bruk av navn er konsistent med deres deklarasjon at typen av (sub)-uttrykk stemmer med operasjonene Det vil altid være ting som ikke kan sjekkes før utførelsen index out of range i arrayer none-test for remote access r.a Stor forskjell på språk med og uten typer på variable og parametre data er egentlig altid typet om variable ikke er typet: testing hele tiden på at data-operasjoner er OK om variable er typede: Nesten all sjekk kan gjøres på kompileringstidspunktet, og det kan genereres bedre kode 3/15/11 3

En drøm men Intet standard beskrivelsesspråk Input til semantisk sjekker er rimelig komplisert Det er altid en masse ad-hoc regler Derfor Man ser på generelle metoder Men, de må programmeres i hvert tilfelle Why MDA PIM to PSM via a model of the platform will stay a dream 3/15/11 4

Attributt og attributt-grammatikker En attributt er en egenskap ved et språkbegrep Eksempler: statisk? også: typen til uttrykk dynamisk? (av og til statisk) Statiske attributter: Kan beregnes før utførelsen Dynamiske attributter: Må beregnes under utførelsen statisk? {Fortran: statisk, Java: dynamisk} statisk For attributt-grammatikker er alle attributter statiske, og de er definert i tilknytning til grammatikken for språket 3/15/11 5

Attributt-grammatikker Attributter er variable knyttet til nodene i parseringstreet Hver semantisk regel er knyttet til en produksjon Deres verdier definert ved semantiske regler Bare ett attribut til hvert symbol, alle har samme navn, bare een regel pr produksjon 3/15/11 6

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 forskjelige symboler kan generelt være helt forskjellige, men har ofte mye felles Attributtene er ment å materialisere seg som variable knyttet til nodene i et parseringstre Attributten a til noden X skrives X.a Attributtene er definert ved at det til hver regel er knyttet en likning av formen: X 0 -> X 1 X 2 X 3 må være arvet arvet attributt syntetisert attributt 3/15/11 7

Eksempel Alle symboler (bortsett fra +, - og * ) har det ene attributtet val. exp i brukes hvis samme symbol fler ganger Skal ikke beregnes ved semantiske regler 3/15/11 8

Eksempel Attributter number: val digit: val Terminaler: - (ingen) Litt merkelig eksempel, da dette vanligvis gjøres i scanneren 3/15/11 9

Syntetiserte attributter NB: Hvert attributt må velges til enten å være syntetisert eller arvet arvede Avhengighet i en S-attribut-grammatikk Trykkfeil: A.a får også være avhengig av A.b dersom b er et arvet attributt syntetiserte Mulig avhengighet for syntetisert attributt 3/15/11 10

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 3/15/11 11 AA...... AX1 AX3 a AX2 b d

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

Attr.-grammatikk som bygger abstrakt syntakstre Attributter: exp: tree term: tree factor: tree number: lexval Merk: det abstrakte syntakstreet bygges ut fra at vi har det konkrete parseringstreet lexval=42 lexval=34 lexval=3 3/15/11 13

Grammatikk med arvede attributter Attributter decl: - type, varlist,id: dtype Avhengighetsgraf Attributtet dtype er her et arvet attributt Vi kan skrive om grammatikken slik at den blir nesten syntetisert (eksempel 6.18) 3/15/11 14

Eksempel 6.18 Denne ga arvede attr.: Nytt forslag: dtype er nå nesten bare syntetisert er egentlig arvede, men kan gjøres ferdige fra var-list og decl 3/15/11 15

Eksempel på arvede attributter Attributter based-num: val basechar: base (syntetisert) num: val, base (base er arvet) digit: val (val er overalt syntetisert ) 3/15/11 16

Kan også lages om til syntetiserte attributter Mulig beregningsrekkefølge 3/15/11 17

Konsistens og beregnbarhet Alle attributter er enten arvede eller syntetiserte Men merk: OK at basechar.base syntetisert, mens num.base arvet Alle attributter må være definerte. Gjøres ved at innen hver produksjon: alle syntetiserte attributter i venstresiden er definert alle arvede attributter i høyresiden er definert det må ikke være noen lokale avhengighets-løkker Siden alle attributter er enten arvede eller syntetiserte, er hvert attributt i et parseringstre definert een og bare een gang Def 1 Def 2 3/15/11 18

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 Det som brukes Man overbeviser seg på forhånd om at det ikke kan bli løkker i noe syntakstre Forhåndsbestemmer en rekkefølge for beregning 3/15/11 19

Beregningsalgoritme for type-grammatikk NB: Treet antas å være bygget ferdig på forhånd Filosofi Syntetiserte attributter settes i T ut fra barnas verdier Arvede attributter setts i barna til T ut fra verdiene i T og i andre barn 3/15/11 20

3/15/11 21

Beregning for base -grammatikken Antar ferdiglaget tre Samme filosofi som for foil 20. 3/15/11 22

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 3/15/11 23

3/15/11 24

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 3/15/11 25

Beregning av L-attribut-gramm. under recursive descent parsering A ->... 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 } Generalisering av eksempel 6.16, men for L-attributt grammatikk 3/15/11 26