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

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

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

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

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

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

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

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

Med rettelser til oppgave 5.18, gjort 3/3

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

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

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

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

UNIVERSITETET I OSLO

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

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

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

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

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

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. 5, del 1: Parsering nedenfra-opp (Bottom-up parsering) 16/ Stein Krogdahl Ifi, UiO

UNIVERSITETET I OSLO

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

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

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

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

MED SVARFORSLAG UNIVERSITETET I OSLO

INF5110 V2012 Kapittel 4: Parsering ovenfra-ned

UNIVERSITETET I OSLO

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

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

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

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

UNIVERSITETET I OSLO

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

Følger Sipsers bok tett både i stoff og oppgaver.

INF3110 Programmeringsspråk

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

INF2820 Datalingvistikk V2014. Jan Tore Lønning

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

UNIVERSITETET I OSLO

INF 5110, 3. februar Dette foilheftet: Kapittel 3

INF januar Forelesninger fremover:

Kontekstfrie grammatikker og syntaksanalyse (parsering)

Skanning del I. Kapittel 2 INF 3110/ INF

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

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

Hjemmeeksamen 1 i INF3110/4110

Dagens Tema: Grammatikker

TMA4140 Diskret Matematikk Høst 2016

Kontekstfrie grammatikker og syntaksanalyse (parsering)

Skanning del I INF /01/15 1

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

MED SVARFORSLAG UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet

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

Dagens Tema: Grammatikker

INF2820 V2017 Oppgavesett 6 Gruppe 7.3

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

INF2820 V2017 Oppgavesett 5 Gruppe 21.2

MED SVARFORSLAG UNIVERSITETET I OSLO

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

INF2080 Logikk og beregninger

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

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

Løsningsforslag. Oppgavesettet består av 9 oppgaver med i alt 20 deloppgaver. Ved sensur vil alle deloppgaver telle omtrent like mye.

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

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

Kontekstfrie grammatikker og syntaksanalyse (parsering)

UNIVERSITETET I OSLO

Oppgave 2. Eksamen INF2820, 2015, oppgave 2. La gramatikk G være:

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

UNIVERSITETET I OSLO

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

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

Hovedstoffet i kap 4: 16. Februar Ifi, UiO

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

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.

Sekventkalkyle for utsagnslogikk

Svarforslag til ukeoppgaver til INF 4130

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

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

Anatomien til en kompilator - I

UNIVERSITETET I OSLO

INF2820 Datalingvistikk V Gang 19.3 del 1 Jan Tore Lønning

UNIVERSITETET I OSLO

Oppgaver til kodegenerering etc. INF-5110, 12. mai, 2015

Oppgave 1 Vi har gitt følgende grammatikk for noe vi kan kalle speilengelsk :

Anatomien til en kompilator - I

UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet. INF1080 Logiske metoder for informatikk

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

Slides til 12.1 Formelt språk og formell grammatikk

INF5830, H2009, Obigatorisk innlevering 2. 1 Oppgave: Unære produksjoner i CKY

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

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

EKSAMEN. Emnekode: Emne: Matematikk for IT ITF Eksamenstid: Dato: kl til kl desember Hjelpemidler: Faglærer:

MAT1120. Obligatorisk oppgave 1 av 2. Torsdag 20. september 2018, klokken 14:30 i Devilry (devilry.ifi.uio.no).

Transkript:

Oppgaver til INF 5110, kapittel 5, med svarforslag Gjennomgått torsdag 26. febr. 2008. Dette er versjon fra 28/7 OPPGAVER: Fra boka: 5.3, 5.4, 5.11, 5.12, 5.13. Oppgave 2 fra Eksamen 2006. Utvid grammatikken på foil 4 (nr. 6 i siste utgave) for kap 5, del2, med høyreassosiativ opphøying (dobbel stjerne), og se på hvordan konflikter da skal løses. Torsdag 28/2: Egentlig ingen undervisning. Men det ble nok litt mange oppgaver, så vi kommer neppe gjennom alt Derfor håper jeg folk går hjem og studerer svarforslagene. Om det er uklarheter kommer jeg kl. 10.15 på torsdag 28/2, og svarer på spørsmål som noen måtte ha. NB: Er i Lille aud. minste et kvarter (til 10.30), men går da om det ikke er flere spørsmål!

Fra boka: Oppgave 5.3 Kommentar: Denne er, i motsetning til den med S-> (S)S, ikke LL(1) (se kommentar i forbindelse med én av oppgavene til kap 4) Den er ikke LR(0) på grunn av tilst. 1. Merk at tilst. 0 og 2 ikke er problematiske siden det ikke er aktuelt å skifte for noe terminalsymbol. Den er SLR(1) fordi i tilstand 1 er red(s -> S) bare aktuelt for $, mens skift bare er aktuelt for (. Man kan også ekvivalent si at den er SLR(1) fordi tabellen ble entydig. SLR(1)-tabell

$0 ( ( ) ( ) ) $ $0 S 1 ( ( ) ( ) ) $ $0 S 1 ( 2 ( ) ( ) ) $ $0 S 1 ( 2 S 3 ( ) ( ) ) $ To røde streker under betyr at $0 S 1 ( 2 S 3 ( 2 ) ( ) ) $ reduksjone med S -> ε er utført. $0 S 1 ( 2 S 3 ( 2 S 3 ) ( ) ) $ En strek under betyr at det skal $0 S 1 ( 2 S 3 ( 2 S 3 ) 4 ( ) ) $ reduseres med det understrekede, $0 S 1 ( 2 S 3 ( ) ) $ mens piler betyr skift. $0 S 1 ( 2 S 3 ( 2 ) ) $ $0 S 1 ( 2 S 3 ( 2 S 3 ) ) $ $0 S 1 ( 2 S 3 ( 2 S 3 ) 4 ) $ $0 S 1 ( 2 S 3 ) $ $0 S 1 ( 2 S 3 ) 4 $ $0 S 1 $ accept!

Oppgave 5.4

Oppgave 5.4 (a) Samme kjerne (core) men annen lookahead. Går igjen hele veien. I den basale LR(1)-måten skriver man disse itemene hver for seg. I LALR(1)-DFA er vil man derimot skrive disse to som én linje, slik: S S ( S ) ) (

Oppgave 5.4 (a og b) Merk at lookahead-symbolet ikke betyr noe for tabell-oppsettet når punktumet står inni, bare når det står til slutt!

Oppgave 5.4 (a og b) r( S ε) s 2 r( S ε) r( S ε) s 5 s 4 r( S S ( S ) ) r( S ε) r( S ε) s 5 s 7 r( S S ( S ) ) r( S ε) accept r( S S ( S ) ) 1 3 6

Over er angitt forberedelsen til en LALR(1)-DFA. De som har lik core er slått sammen i forhold til LR(1)-DFA en til høyre (og vi har derfor fått LR(0)- DFA en), men vi har ennå ikke fylt inn lookahead-mengdene som altså skal være unionen av look-aheadene fra alle tilsvarende LR(1)-itemer. Se neste foil. Oppgave 5.4 -c

Oppgave 5.4 -c $ $ ( $ $ ( $ ( $ ( ) ( ) $ ( ) $ ( ) ( ) $ ( ) Follow(S) = { (, ), $ } For en del slutt-itemer får vi altså færre lookahead-symboler enn de i Follow(S). (Dette kunne gitt kraftigere analyse enn for SLR(1), men det får ikke betydning her fordi grammatikken allerede er SLR(1) ).

Oppgave 5.4 - d og e $ $ ( $ ( $ ( ) ( ) $ ( ) $ $ ( $ ( ) $ ( ) ( ) Deloppgave (e): For riktige setninger vil en med LALR(1)- tabellen og LR(1)-tabellen gjøre nøyaktig de samme stegene. For gale setninger kan man med LALR(1)-tabellen gjøre noen flere reduksjoner enn med LR(1)-tabellen før feilen oppdages r( S ε) s25 r( S ε) r( S ε) r( S ε) accept 1 36 s25 r( S S ( S ) ) s47 r( S S ( S ) ) r( S S ( S ) )

5.11 a og b A A A A a a a ε a a a For både tilstand 2 og 4 gjelder at på input a så foreslås det både å skifte og å redusere med A ε. Altså er grammatikken ikke LR(1). (b) Grammatikken genererer alle strenger med et partall antall a -er, og den er entydig siden den bare kan gjøre dette på en måte (se figur). Ekstra: Med denne grammatikken må vi imidlertid lese helt til slutten av setningen for å finne når vi skal gå over fra å skifte til å redusere. Det skal skje på midten. Vi kan dermed se at grammatikken ikke er LR(k) for noen k. Andre grammatikker som gir de samme setninger, og som helt kurant er SLR(1) er: A A a a ε eller: A a a A ε

Oppgave 5.12 En rimelig idiotisk grammatikk som er LR(1), men ikke LALR(1) d LR(1)-DFA en blir som angitt til venstre. De eneste stedene det kunne bli LR-konflikt er tilstandene 4 og 5 (reduse/reduser-konflikter) Men vi ser de lar seg løse i LR(1), siden det i hver tilstand er slik at lookahead-symbolet er forskjellige for de to reduksjonene. Men, når vi skal lage LALR(1)-DFA en ser vi at tilstandene 4 og 5 blir slått sammen, og da får begge reduksjonene lookahead-mengden {d, e}. Dermed lar ikke konflikten seg løse i LALR(1)-DFA en. Kunne vi også laget et eksempel på en LR(1)-grammatikk der LALR(1)-DFA en fikk en skift/red.-konflikt? Svaret er NEI, se oppg. 5.13 neste lysark

5.13: Anta at en grammatikk G er LR(1) men ikke LALR(1). Vis at LALR(1)-DFA en til G da bare kan ha red./red.-konflikter (altså kan ikke ha skift/red.-konflikter) Vi viser: Dersom LALR(1)-DFA en til en grammatikk har en skift/red.-konflikt, så vil også LR(1)-DFA en ha en skift/red.- konflikt. Kobling: Anta vi viser det til venstre, og at G er LR(1), men at den ikke er LALR(1) bl.a. på grunn av en skift/red.-konflikt. Dette blir en selvmotsigelse, for vi viser til venstre at en av tilstandene i LR(1)-DFA en da også må ha en skift/red.-konflikt, og at grammatikken dermed ikke kan være LR(1). M og N er mengder av lookahead-symboler Vi antar at skift/red.-konflikten i LALR(1)-DFA en består i at a M N. Da må enten a M eller a N, og det betyr at det måtte være en skift/red.-konflikt i en av LR(1)-tistandene.

Eksamen 2006, oppgave 2 Betrakt følgende grammatikk G, hvor S og T er ikketerminal-symboler, # og a er terminalsymboler, og S er startsymbolet. S T S S T T # T T a a) Finn First og Follow-mengdene til T og S (og la $ betegne end-of-file som i boka). b) Formulér med dine egne ord hvilke sekvenser av terminalsymboler du kan lage ut fra S. c) Avgjør om du kan lage et regulært uttrykk som uttrykker disse sekvensene av # og a som du kan utlede fra S, og hvis svaret er ja, gi et slikt regulært uttrykk. d) Innfør et nytt start-symbol S S og lag LR(0)-DFA-en for G rett fra denne grammatikken. Nummerér tilstandene. e) Gi et kort argument som bestemmer hvike(n) av følgende fem grupper G hører med i: a. LR(1) b. LALR(1) c. SLR(1) d. LR(0) e. Ingen av de overstående. Hint: Finn ut hvilke mulige konflikter du har i DFA-en og/eller om grammatikken er entydig.. f) Lag parseringstabellen for G ut fra den typen grammatikk den er. g) Vis hvordan setningen: a#a vil bli parsert ved å skrive opp, som i boka, stakk-innholdet og input for hver av skift- eller reduser-operasjon

Eksamen 2006, oppgave 2 2a S T S Gjør at Fi(S) skal ha alle fra Fi(T), og at Fo(T) skal ha alle fra Fi(S) S T Gjør, som over, at Fi(S) skal ha alle fra Fi(T), og at Fo(T) skal ha alle fra Fo(S) T # T Gjør at Fi(T) skal inneholde # T a Gjør at Fi(T) skal inneholde a First Follow S a # $ T a # a # $ 2b 2c Vi kan fra S generere en-eller-flere a -er hvor hver a har null eller flere # foran seg. Vi har flg. regulære uttrykk { {#}* a}+

Eksamen 2006, oppgave 2 2d LR(0)-DFA en blir som følger: S T S S T T # T T a

Eksamen 2006, oppgave 2 2e Den er ikke LR(0) fordi det ikke er entydig hvilken regel vi skal bruke etter f.eks å ha lest # (vi må se på nest symbol for å se hvilken produksjon vi skal nytte kommer det en ny # eller a?) Det er altså shift/red konflikt i tilstand 2. Den er SLR(1) fordi den skift-reduser konflikten vi har i tilstand 2 løses ved at Followmengden til S ikke inneholder # eller a (dvs. har vi # eller a som neste symbol, benyttes T->.#T med overgang til 3 eller 5, mens er det $ gjør vi reduksjon med S -> T og går tilbake til 0 og så 1 og accept). Siden den er SLR(1), er den også LALR(1) og LR(1). Den er følgelig også entydig. 2f a # $ S T -------------------------------------------------------------------- 0 s5 S3 1 2 ------------------------------------------------------------------------------- 1 accept ------------------------------------------------------------------------------- 2 s5 s3 r(s->t) 4 2 ------------------------------------------------------------------------------- 3 s5 s3 6 -------------------------------------------------------------------------------- 4 r(t->ts) -------------------------------------------------------------------------------- 5 r( T->a) r(t->a) r(t->a) ------------------------------------------------------------------------------- 6 r( T->#T) r(t->#t) r(t->#t) ------------------------------------------------------------------------------- (Merk at i tilstand 2 har vi både skift og reduksjon basert på look-ahead-symbolet) First Follow S a # $ T a # a # $

Eksamen 2006, oppgave 2 2g a # $ S T ------------------------------------------------------------------------ 0 s5 S3 1 2 1 accept 2 s5 s3 r(s->t) 4 2 3 s5 s3 6 4 r(t->ts) 5 r( T->a) r(t->a) r(t->a) 6 r( T->#T) r(t->#t) r(t->#t) ---------------------------------------------------------------------------------- Analyse av a # a : ---------------------------------- $ 0 a # a $ $ 0 a 5 # a $ $ 0 T 2 # a $ $ 0 T 2 # 3 a $ $ 0 T 2 # 3 a 5 $ $0 T 2 # 3 T 6 $ $0 T 2 T 2 $ $ 0 T 2 S 4 $ $ 0 S 1 $ accept --------------------------------------

Gammel foil: Innfør her ** (høyeste presedens, og høyreassossitiv) Fordel ved flertydige grammatikker: De er som regel enklere å sette opp, se f.eks. til venstre her, og tidligere grammatikker for ifsetningen Konflikter må oppstå, men: man kan løse mange konflikter med å angi presedens, assosiativitet, m.m. Dette kan angis f.eks. i CUP og Yacc Tilstand 5: Stakk= E+E Input= $: reduser, fordi skift ikke lovlig for $ +: reduser, fordi + er venstreassosiativ *: skift, fordi * har presedens over + Tilstand 6: Stakk= E*E Input= $: reduser, fordi skift ikke lovlig for $ +: reduser, fordi * har presedens over + *: reduser, fordi * er venstreassossiativ) Hva om også **? (høyreass.). Blir oppgave! r(e E+E) r(e E*E) s4 r(e E*E) r(e E+E) r(e E*E)

Innføring av høyre-assosiativ ** med høyeste presedens Her måtte det bli konflikter, siden grammatikken er flertydig, og konfliktene opptrer i tilstandene 6, 7 og 8. Ut fra presedens og assosiativitet løser vi dette slik: + * ** Tilstand 6 + red( E-> E+E) (venstre-ass.) * skift 3 ** skift 4 Tilstand 7 + red(e -> E*E) * red(e -> E*E) (venstr-ass.) ** skift 4 Tilstand 8 + skift 2 * skift 3 ** skift 4 (høyre-ass.) NB: Dette skjer altså automatisk i CUP når man har oppgitt presedens og assosiativitet riktig.