kap. 5 del 2 – slr(1), lr(1) og lalr(1) – grammatikker inf5110 – v2005

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

Upload: kasi

Post on 17-Jan-2016

48 views

Category:

Documents


0 download

DESCRIPTION

Kap. 5 del 2 – SLR(1), LR(1) og LALR(1) – grammatikker INF5110 – v2005. Arne Maus, Ifi UiO. S. B. A. A. B. t 1. t 2. t 3. t 7. t 5. t 6. t 4. ”Bottom up” parsering (nedenfra-og-opp). LR-parsering og grammatikker LR(0) SLR(1) LR(1) LALR(1) Autimatisert - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Kap. 5 del 2 – SLR(1), LR(1) og LALR(1) – grammatikker INF5110 – v2005

Kap. 5 del 2 –SLR(1), LR(1) og LALR(1) – grammatikker

INF5110 – v2005

Arne Maus,Ifi UiO

Page 2: Kap. 5 del 2 – SLR(1), LR(1) og LALR(1) – grammatikker INF5110 – v2005

”Bottom up” parsering (nedenfra-og-opp)

S

A

t 1 t 2 t 3 t 7t 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) )

Page 3: Kap. 5 del 2 – SLR(1), LR(1) og LALR(1) – grammatikker INF5110 – v2005

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

Page 4: Kap. 5 del 2 – SLR(1), LR(1) og LALR(1) – grammatikker INF5110 – v2005

Viktig eksempel – om å løse konflikter (presedens og assosiativitet)

r(EE+.E)

r(EE*E.)

r(EE+E.)

r(EE*.E)

Page 5: Kap. 5 del 2 – SLR(1), LR(1) og LALR(1) – grammatikker INF5110 – v2005

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 = $

.........

.........

Page 6: Kap. 5 del 2 – SLR(1), LR(1) og LALR(1) – grammatikker INF5110 – v2005

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

Page 7: Kap. 5 del 2 – SLR(1), LR(1) og LALR(1) – grammatikker INF5110 – v2005

Oppsett av LR(1) – DFA(uten å gå veien om LR(1) – NFA !)

Starttilstanden er tillukningen avitemet [A’ . A, $]

Grammatikk:A’ AA (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

Page 8: Kap. 5 del 2 – SLR(1), LR(1) og LALR(1) – grammatikker INF5110 – v2005

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

Page 9: Kap. 5 del 2 – SLR(1), LR(1) og LALR(1) – grammatikker INF5110 – v2005

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

Page 10: Kap. 5 del 2 – SLR(1), LR(1) og LALR(1) – grammatikker INF5110 – v2005

LR(1) – tabell for:

Entydig parseringstabell – defor LR(1)

Page 11: Kap. 5 del 2 – SLR(1), LR(1) og LALR(1) – grammatikker INF5110 – v2005

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)

Page 12: Kap. 5 del 2 – SLR(1), LR(1) og LALR(1) – grammatikker INF5110 – v2005

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

Page 13: Kap. 5 del 2 – SLR(1), LR(1) og LALR(1) – grammatikker INF5110 – v2005

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

LALR(1)

LR(1)

Page 14: Kap. 5 del 2 – SLR(1), LR(1) og LALR(1) – grammatikker INF5110 – v2005

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

Page 15: Kap. 5 del 2 – SLR(1), LR(1) og LALR(1) – grammatikker INF5110 – v2005

Oppgave 5.4

Page 16: Kap. 5 del 2 – SLR(1), LR(1) og LALR(1) – grammatikker INF5110 – v2005

Oppgave 5.4 (a)

Page 17: Kap. 5 del 2 – SLR(1), LR(1) og LALR(1) – grammatikker INF5110 – v2005

Oppgave 5.4 (a og b)

Page 18: Kap. 5 del 2 – SLR(1), LR(1) og LALR(1) – grammatikker INF5110 – v2005

Oppgave 5.4 -c

Page 19: Kap. 5 del 2 – SLR(1), LR(1) og LALR(1) – grammatikker INF5110 – v2005

Oppgave 5.4 -d

Page 20: Kap. 5 del 2 – SLR(1), LR(1) og LALR(1) – grammatikker INF5110 – v2005

5.4 - e

Page 21: Kap. 5 del 2 – SLR(1), LR(1) og LALR(1) – grammatikker INF5110 – v2005

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

Page 22: Kap. 5 del 2 – SLR(1), LR(1) og LALR(1) – grammatikker INF5110 – v2005

Panic-mode for LR-parsering.

Page 23: Kap. 5 del 2 – SLR(1), LR(1) og LALR(1) – grammatikker INF5110 – v2005

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

Page 24: Kap. 5 del 2 – SLR(1), LR(1) og LALR(1) – grammatikker INF5110 – v2005

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:

fordel ulempe

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)