Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Kap. 5 del 2 – SLR(1), LR(1) og LALR(1) – grammatikker INF5110 – v2005 Arne Maus, Ifi UiO.

Liknende presentasjoner


Presentasjon om: "Kap. 5 del 2 – SLR(1), LR(1) og LALR(1) – grammatikker INF5110 – v2005 Arne Maus, Ifi UiO."— Utskrift av presentasjonen:

1 Kap. 5 del 2 – SLR(1), LR(1) og LALR(1) – grammatikker INF5110 – v2005 Arne Maus, Ifi UiO

2 ”Bottom up” parsering (nedenfra-og-opp) S A t 1 t 2 t 3 t 7 t 4 t 5 t 6 B B A LR-parsering og grammatikker - LR(0) - SLR(1) - LR(1) - LALR(1) -Autimatisert -YACC, Bison ( LALR(1) )

3 SLR(k) – mulig å lage teori for den, men lite praktisk å få ut av det

4 Viktig eksempel – om å løse konflikter (presedens og assosiativitet) r(E  E+.E) r(E  E*E.) r(E  E+E.) r(E  E*.E)

5 Grammatikk som ikke er SLR(1) Denne viser det seg vi kan løse ved å være nøyere med etterfølgermengder i LR(0)-DFA’en under konstruksjon) S id V Follow(S) = { $} Follow(V) = { :=, $} Har reduser/reduser – konflikt for input = $

6 Generelt om LR(1) - parsering Hovedidé: Vil holde greie på under oppsett av NFA og DFA hva som kan stå bak en produksjon i den sammenhengen den står NFA:[A . X , a] X [A  X. , a] Vi flytter oss ett hakk framover i høyresiden, men produksjonen forblir i samme sammenheng NFA: [A . B , a]  [A . , b] Spesialtilfelle (  =  ): [A . B , a]  [A . , a] LR(1) – itemene: [A . X , a] Angir at a kan komme etter A  i denne aktuelle sammenhengen (Altså ikke bak punktumet, med mindre  =  ) For alle: B  1 |  2 |.. og alle b  First(  a) For alle B  1 |  2 |.. a, b = look-ahead

7 Oppsett av LR(1) – DFA (uten å gå veien om LR(1) – NFA !) Starttilstanden er tillukningen av itemet [A’ . A, $] Grammatikk: A’  A A  (A) A  a A’  A. opptrer bare med look-ahead $ (angir aksept) To tilstander i LR(1)- DFA’en regnes som like bare om de har nøyaktig den samme mengde av LR(1) – itemer (medregnet look- ahead symbolene) se tilstand 2 og 5

8 Bokas definisjon av LR(1) – parsering. (samme svakheter som for LR(0) og SLR(1)

9 Er grammatikken LR(1) Metode som før: Sett opp parseringstabell, og sjekk at den er entydig. LR(1) – kravet kan formuleres som: Test for hver aktuelle X

10 LR(1) – tabell for: Entydig parseringstabell – defor LR(1)

11 LR(1) –DFA for problem-grammatikken som ikke var SLR(1) Her var dert konflikt ved SLR(1), siden Follow(V) = { :=, $}. LR(1) betraktning viser imidlertid at i denne tilstanden (sammenhengen) kan V bare følges av { :=}, og da har vi ikke problemer. Her er situasjonen hvor V kan følges av $, men her er det ikke problematisk. Grammatikken er altså LR(1)

12 Overgang fra LR(1) til LALR(1) ”Core” (kjerne) av en LR(1)-tilstand: Mengden av LR(0) –itemer, når man ser bort fra ”look- ahead” itemene. Merk at vi kan ha både [A . , a] og [A . , b]. Dette gir bare ett item i kjernen : A .  Observasjoner: Kjernen i alle LR(1) – tilstander er en LR(0) – tilstand To LR(1)-tilstander med samme kjerne har samme kanter ut, og tilvarende ut-kanter fører til tilsander med samme kjerne. Disse er LALR(1) - DFA’en

13 Sammenligning av LR(1) og LALR(1) - DFA’er LALR(1) LR(1)

14 Kan lage LALR(1)- DFA’en direkte Lag LR(0)-DFA’en (sett av plass til ”look-ahead” – symboler. Sett inn lookahead $ på [A’ .A, ] Fyll på med det som ”må med” av lookahead’er i en kompletteringsprosess, til det stopper Grammatikken er LALR(1) dersom dette gir en entydig parserings-tabell. Det blir det jo (selvfølgelig) her fordi grammatikken er jo LR(0) !

15 Oppgave 5.4

16 Oppgave 5.4 (a)

17 Oppgave 5.4 (a og b)

18 Oppgave 5.4 -c

19 Oppgave 5.4 -d

20 5.4 - e

21 Yacc-produsert parseringstabell (merk påfyll av ekstra reduksjoner)

22 Panic-mode for LR-parsering.

23 Panic-mode for LR-parsering kan gå i evig løkke

24 Oppsummering for bottom-up Vi formulerer vår grammatikk som basal BNF Konflikter kan løses med: omdefinere BNF’en (prøver kanskje det først) eller ved direktiver til Yacc eller løser det senere i semantisk analyse N.B. Ikke alle konflikter kan løses av selv LR(1) – skriv om! (eks: A  a | aAa) Vi har ulike muligheter for å betrakte/parsere vår BNF: fordelulempe LR(0)Definerer DFA-tilstander som brukes av SLR og LALR Mange (unødige) konflikter red/red og red/skift oppstår SLR(1)Klar forbedring av LR(0)Få/ingen, men ikke så god som LALR LR(1)Mest nøyaktig (færrest) konflikter. Best feilhåndtering. Svært mange tilstander (tabell på opp til 1 M felter for et ordentlig språk) LALR(1)Nesten like bra som LR(1) Dårligere feilhåndtering (for mange reduksjoner før feil oppfattes)


Laste ned ppt "Kap. 5 del 2 – SLR(1), LR(1) og LALR(1) – grammatikker INF5110 – v2005 Arne Maus, Ifi UiO."

Liknende presentasjoner


Annonser fra Google