Laste ned presentasjonen
Presentasjon lastes. Vennligst vent
PublisertHaakon Bakke Endret for 9 år siden
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)
Liknende presentasjoner
© 2024 SlidePlayer.no Inc.
All rights reserved.