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

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

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

INF5110 V2012 Kapittel 4: Parsering ovenfra-ned

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

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

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

Hovedstoffet i kap 4: 16. Februar Ifi, UiO

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

Hovedstoffet i kap 4:

Stoff som i boka står i kap 4, men som er

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

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

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

Oppgave 2. INF5110 oppgave 2 på eksamen v04 med teori. FirstMengder. Arne Maus Ifi. Eks. 4.9 Beregning av First-mengde. terminal

Topic of the day: Ch. 4: Top-down parsing

INF5110, 15/ Dagens temaer: Avslutning kap. 4 Begynne på kap. 5 Se på oppgave. Stein Krogdahl, Ifi UiO

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

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

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

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

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

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

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

Bottom up parsering (nedenfra-og-opp) Kap. 5 del 1 Intro til parsering nedenfra-og-opp samt LR(0) og SLR(1) grammatikker INF5110 v2006

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

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: Grammatikker Kap. 3 i K. C. Louden

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

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

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

INF5110 Kap. 5: Parsering nedenfra-og-opp (Bottom-up parsing) 21/ Stein Krogdahl Ifi, UiO. Angående Oblig 1:

INF 5110, 3. februar Dette foilheftet: Kapittel 3

Kontekstfrie grammatikker og syntaksanalyse (parsering)

INF januar Forelesninger fremover:

Kontekstfrie grammatikker og syntaksanalyse (parsering)

INF3110 Programmeringsspråk

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

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

Dagens Tema: Grammatikker

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

Statisk semantisk analyse - Kap. 6

Semantisk Analyse del I

Statisk semantisk analyse - Kap. 6

Kap. 5: Oppgaver m.m. (Noen lysark fra tidligere er gjentatt her) Stein Krogdahl, Ifi, UiO 8. Mars 2007

Repetisjon. 1 binærtall. INF3110 Programmeringsspråk. Sist så vi ulike notasjoner for syntaks: Jernbanediagrammer. BNF-grammatikker.

Oppgaver til INF 5110, kapittel 5

Dagens Tema: Grammatikker

Kontekstfrie grammatikker og syntaksanalyse (parsering)

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

Oppgaver til INF 5110, kapittel 5 Fullt svar på oppgave 5.4, og en del andre oppgaver med svar

Oppgaver til INF 5110, kapittel 5, med svarforslag Gjennomgått torsdag 26. febr Dette er versjon fra 28/7

UNIVERSITETET I OSLO

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

Med rettelser til oppgave 5.18, gjort 3/3

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

INF2820 Datalingvistikk V Gang Jan Tore Lønning

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 INF 3110/ /8/2004 1

Kodegenerering, del 2: Resten av Kap. 8 pluss tilleggsnotat (fra kap. 9 i ASU ) INF5110 V2007

INF2820 Datalingvistikk V2012. Jan Tore Lønning

Anatomien til en kompilator - I

Språktyper og syntaksanalyseteknikker. Dagens temaer. Hvordan lage en deterministisk automat? Fra jernbanediagram til ID-automat

Obligatorisk Oppgave 1

INF2820 Datalingvistikk V2011. Jan Tore Lønning & Stephan Oepen

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

INF2820 Datalingvistikk V Gang Jan Tore Lønning

INF mai 2014 Stein Krogdahl, Ifi, UiO

Anatomien til en kompilator - I

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

Obligatorisk Oppgave 1

INF2820 Datalingvistikk V Gang 26.2 Jan Tore Lønning

Dagens tema: Regulære språk og uttrykk

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

INF2820 Datalingvistikk V Gang 9.3 Jan Tore Lønning

INF Algoritmer og datastrukturer

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

INF2820 Datalingvistikk V2012

UNIVERSITETET I OSLO

Oversikt. INF5110 Obligatorisk Oppgave 1. Andreas Svendsen SINTEF

UNIVERSITETET I OSLO

INF2820 Datalingvistikk V2012. Jan Tore Lønning

Hjemmeeksamen 2 i INF3110/4110

MAT1030 Diskret Matematikk

INF2820 Datalingvistikk V Gang 9.3 Jan Tore Lønning

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

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

INF Algoritmer og datastrukturer

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

6. oktober Dagens program: Første time: Andre time, gjesteforelesning: Uavgjørbarhet. Stein Krogdahl. (Ikke pensum, egne foiler legges ut)

INF oktober Stein Krogdahl. Kap 23.5: Trær og strategier for spill med to spillere

2/22/2011. Høyre- og venstreavledninger. I dag. Chomsky-normalform (CNF) Chomsky-normalform (CNF) PARSING. Jan Tore Lønning & Stephan Oepen

MAT1030 Diskret matematikk

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

INF2820 Datalingvistikk V Gang 27.2 Jan Tore Lønning

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

(define (naer-nok-kuberot? y x) (< (abs (- (kube y) x)) 0.001)) (define (naermere-kuberot y x) (/ (+ (* y 2) (/ x (kvadrat y))) 3))

Transkript:

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

Innhold Motivering Boka gir først parsering uten First/Follow-mengder og så innfører dem. Vi tar teorien først First og Follow-mengder Fjerning av venstre-rekursjon Venstre-faktorisering Rekursive nedstigning LL(1) grammatikker

First og Follow-mengder, hvorfor Når vi leser token og skal analysere en ikketerminal, ønsker vi: finne ut hvilken produksjon (høyreside-alternativ) som kommer nå - ser på: First-mengdene Det vi leste må da være starten på... I kap 4: Sjekke at det som etterfølger det vi nå har lest og tolket som en ikke-terminal, er lovlig etterfølger (feil-sjekking) I kap. 5 (bottom up) finne riktig reduksjon av det vi hittil har lest på input. Follow-mengdene

FirstMengder terminal Def { First (A) = { a finnes avledning A * a α } Dessuten: Om A er utnullbar, så er ε First(A) Per def er da: First(a) = { a } Def A er utnullbar A * ε Algoritme: Gjør steg 1. Gjenta steg 2 til alle Firstmengdene har stabilisert seg.

Eks. 4.9 Beregning av First-mengde Kan bare fylle ut en tabell exp addop term multop factor First

Beregning av Followmengder βγvirkårlige streneger Def Follow (A) = { a finnes avledning S $ * β A a γ } Dvs. Det finnes en utledning fra startsymbolet S hvor A kommer rett før a (a er en terminal) Algoritme: Gjør steg 1. Gjenta steg 2 og 3 til alle Followmengdene har stabilisert seg.

Beregning av Followmengder 4.12 Kan bare fylle ut en tabell exp addop term multop factor Follow

Generelt om situasjonen for neste symbol i First- eller Follow-mengden a First (A) a Follow(A) A S $ B C D E ε ε F G H ε a J K B A C D E F G H J ε ε K A ε a

Fjerning av venstre-rekursjon - case 1 Kan skrives på EBNF A Aα β A β {α} A A A α β A A α α A A α α A β ε A β A A αa ε Eksempel:

Fjerning av venstre-rekursjon Case 2:

Case 3 (indirekte venstre-rekursjon) A Ba Aa c B Bb Ab d Her er det feil i boka i algoritmen s.159 Ikke med som pensum

Eks side 160 Fjerning av venstre-rekursjon Den tradisjonelle entydige grammatikken Med fjernet venstre-rekursjon

Venstre-faktorisering Problem Ønsker ikke alternativer som starter likt: A abc B ab C DE Løsning: A ab A DE A c B C } Gjenta så lenge det er muligheter } Velg lengst mulig prefix Gjør som over. Pass pååfåmed alle alternativer med dette prefixet

eks1:

Litt om stoffet i kap. 4 First og Follow-mengder Boka tar det sist, vi først Begrepet LL(1) parsering Boka reserverer dette begrepet for den metoden (kap 4.2 s. 152) der man bruker en eksplisitt stakk ( isteden for rekursive metoder, som i recursive decent framgangsmåten) Det vanlige er å bruke betegnelsen LL(1) parsering også når rec.decent metoden brukes slavisk på en ren BNFgrammatikk Kravet til en LL(1) grammatikk kommer like tydelig fram ut fra begge disse metodene. Vi skal tenke like mye rec.decent som eksplisitt stakk. (boka gjør bare det siste). Ofte brukes betegnelsen LL(1) parsering også om rec.decent metoden brukt ut fra syntaksdiagrammer eller EBNF, men da er det uklart hva LL(1) kravet til en grammatikk er.

Rekursiv nedstigning parsering Skriv en funksjon /prosedyre/metode for hver ikke-terminal La denne lese/sjekke høyreside-alternativene token : if Global variabel Typisk rec.dec. prosedyre for det enkle tilfellet. Sjekker at angitt terminal kommer, og leser til neste. Brukes ofte bare for å lese (sjekken må slå til).

Situasjonen under rekursiv parsering S C B A Hvilket alternativ? Input Analysert og funnet OK token Skal matches mot resten i prosedyrene

αβγ ε Litt mer kompliserte tilfeller kan løses med EBNF Opprinnelig Skrives ut som: R-D-prosedyre: N.B: Kunne også bruke venstre- faktorisering. Da ville dette bli en egen prosedyre elsepart : ifstmt if (exp) stmt elsepart elsepart ε else stmt

Venstre-rekursjon gir problemer Gir uendelig mange rekursive kall exp exp addop term term N.B. Kan også fjernevenstrerekursjon på trad måte, se senere foil. Bruker EBNF: term term multop factor factor exp term + - term factor *

Hvordan lage noe under rec.-decent parsering? Mål: Ønsker å bygge abstrakt syntaks-tre Men foreløpig: beregner verdien av et uttrykk (med venstre-assosiativitet) Kall Kan lett bygges ut til full kalkulator 3 + 4 + 5

Bygging av syntaks-treet Kall Alternativt: newtemp.leftchild Kall Merk: Dersom det bare er en term, så lages ingen ny node. Vi leverer den vi har fått

Skrive prosedyre for: factor (exp) number proc factor : syntaxtree; var fact: syntaxtree; begin case token of ( : match ( ( ) ; fact = exp ; match ( ) ) ; number : match ( number ) ; fact =makenumbernode( number) ; else error(...) ; end case return fact; end factor;

Node for generering for if-setning if-stmt -> if (exp) stmt [else tstmt] StmntNode (if) testchild thenchild elsechild := nil a b c + b 1

Rec.decent etter tradisjonell fjerning av venstre-rekursjon (treet er nå høyre assosiativt istedenfor venstre). Det må rettes opp. Lage tre eller beregne verdi : 3 4 5-6 3-6 4-1 -6 Det abstrakte syntakstreet vi eventuelt ønsker å lage: 5-6 Parameter valuesofar til prosedyren exp (For trebygging ville den være: rootoftreesofar )

Prosedyrer for beregning av verdi (tre-bygging tilsvarende) Bare analyse Med beregning (trebygging tilsvarende) NB.: Parameter ε -alternativet Leverer verdien uendret oppover igjen.

LL(1) grammatikk A α 1 α 2 α 3... α n LL(1) -kravet for en ren BNF-grammatikk. Det som kreves for at en Rek. desc.-parsering skal fungere direkte fra grammatikken. For å avgjøre om en grammatikk er LL(1) : Sett opp tabell M[N,T] med mulige aksjoner for alle mulige situasjoner, slik: 1. Altså, a First(α ) 2. Altså, dersom: Definisjon: En grammatikk er LL(1) dersom M[N,T] er entydig for alle situasjoner (eller angir error ) α er utnullbar, og a Follow(A )

Oppsett av LL(1) tabell First Follow - Venstre-faktorisering utført - Er ikke vestrerekursiv statement other, if $, else if-stmt if $, else else-part else,ε $, else exp 0, 1 ) Merk: -fjernet venstre-rek. -- Utført venstre-fakt. -er ikke nok til å garantere LL(1)- grammatikk. fordi tabellen er ikke entydig