Parsing 1. Situering Contextvrije grammatica’s Predictive (of recursive-descent) parsing LR-parsing Parser generator: Yacc Error recovery 2.

Slides:



Advertisements
Verwante presentaties
De gemiddelde leerling
Advertisements

SINT LUKAS HOGESCHOOL BRUSSEL
De elektronische verzamelaanvraag Ruben Fontaine Markt- en Inkomensbeheer – dienst Aangiftes.
‘SMS’ Studeren met Succes deel 1
Paulus' eerste brief aan Korinthe (20) 23 januari 2013 Bodegraven.
28 juni 2009 Paëllanamiddag 1 Paëllanamiddag 28 juni 2009 Voorbereiding vrijdagavond (Loopt automatisch - 7 seconden)
Werkwoorden d t dt.
WAAROM? Onderzoek naar het meest geschikte traject voor de verlenging tot in Sint-Niklaas van het bestaande fietspad naast de Stekense Vaart en de Molenbeek.
BRIDGE Vervolgcursus Vervolg op starterscursus Bridgeclub Schiedam ‘59 info: Maandagavond: 19: – of
November 2013 Opinieonderzoek Vlaanderen – oktober 2013 Opiniepeiling Vlaanderen uitgevoerd op het iVOXpanel.
Vennootschapsbelasting Aj 2011
Global e-Society Complex België - Regio Vlaanderen e-Regio Provincie Limburg Stad Hasselt Percelen.
7 april 2013 Zoetermeer 1. 1Korinthe Maar, zal iemand zeggen, hoe worden de doden opgewekt? En met wat voor lichaam komen zij? 2.
 Deel 1: Introductie / presentatie  DVD  Presentatie enquête  Ervaringen gemeente  Pauze  Deel 2 Discussie in kleinere groepen  Discussies in lokalen.
STAPPENPLAN GRAMMATICUS.
Ronde (Sport & Spel) Quiz Night !
Een Concert van het Nederlands Philharmonisch Orkest LES 4 1.
prNBN D addendum 1 Deel 2: PLT
Datastructuren Analyse van Algoritmen en O
© GfK 2012 | Title of presentation | DD. Month
Nooit meer onnodig groen? Luuk Misdom, IT&T
Passie - Verrijzenis Arcabas
Elke 7 seconden een nieuw getal
1 Datastructuren Zoekbomen II Invoegen en weglaten.
Parallelle Algoritmen String matching. 1 Beter algoritme patroonanalyse Bottleneck in eenvoudig algoritme: WITNESS(j) (j = kandidaat in eerste i-blok)
1 introductie 3'46” …………… normaal hart hond 1'41” ……..
Oefeningen F-toetsen ANOVA.
Neurale Netwerken Kunstmatige Intelligentie Rijksuniversiteit Groningen April 2005.
Wat levert de tweede pensioenpijler op voor het personeelslid? 1 Enkele simulaties op basis van de weddeschaal B1-B3.
1 WIJZIGINGEN UNIEK VERSLAG. 2 Agenda Verbeteringen Veranderingen formulieren Praktische herinneringen Nieuwe formulieren Sociale en culturele participatie.
1 7 nov Rijnsburg 7 nov Rijnsburg. 2 Hebreeën 7 15 En nog veel duidelijker wordt het, als naar het evenbeeld van Melchisedek een andere priester.
13 maart 2014 Bodegraven 1. 1Korinthe Want gelijk het lichaam één is en vele leden heeft, en al de leden van het lichaam, hoe vele ook, een lichaam.
1 Datastructuren Heapsort (2e deel) College 5. 2 Vandaag  Heaps en Heapsort  (eind)  Nog sneller sorteren:  Ondergrenzen  Linair sorteren.
Ontleden nNon-deterministisch m.b.v. Parser-combinators nDeterministisch m.b.v. Stack-machine type Parser a b = [a]  [ (b, [a]) ] type Parser a b = [a]
1 19 dec Rijnsburg 19 dec Rijnsburg. 2 Hebreeën 8 1 De hoofdzaak VAN ONS ONDERWERP is, dat wij zulk een hogepriester hebben, die gezeten is.
Werken aan Intergenerationele Samenwerking en Expertise.
Geometrie en topologie Rob Kromwijk, 26 juli 2012.
Afrika: Topo nakijken en leren.
De FFT spectrumanalyzer
User management voor ondernemingen en organisaties
2009 Tevredenheidsenquête Resultaten Opleidingsinstellingen.
ribwis1 Toegepaste wiskunde Lesweek 01 – Deel B
ribwis1 Toegepaste wiskunde – Differentieren Lesweek 7
ribWBK11t Toegepaste wiskunde Lesweek 02
ANother Tool for Language Recognition
Van Vensoc tot Biztax Vennootschapsbelasting Aj 2011.
1 Syntax JavaLogo. 2 Hoofdstuk 1 Tekenen in Java.
ECHT ONGELOOFLIJK. Lees alle getallen. langzaam en rij voor rij
Hartelijk welkom bij de Nederlandse Bridge Academie Hoofdstuk 5 Stayman & Jacoby 1Contract 2, hst 5. Stayman & Jacoby.
Hartelijk welkom bij de Nederlandse Bridge Academie Hoofdstuk 7 De 2 ♦ /2 ♥ /2 ♠ en de 2 ♣ -opening 1Contract 2, hst 7.
Hartelijk welkom bij de Nederlandse Bridge Academie Hoofdstuk 9 Het eerste bijbod 1Contract 1, hoofdstuk 9.
17/08/2014 | pag. 1 Fractale en Wavelet Beeldcompressie Les 5.
17/08/2014 | pag. 1 Fractale en Wavelet Beeldcompressie Les 3.
Fractale en Wavelet Beeldcompressie
Fractale en Wavelet Beeldcompressie
De financiële functie: Integrale bedrijfsanalyse©
aangename ont - moeting
1 Week /11/ Dalende beurzen Blijkbaar is de macht van de centrale banken in de wereld overroepen Men kan niet blijven de mensen.
POL (MO)-methode  Dit is de kapstok waar je de rest van de zin aan op kunt hangen.  Vervolgens kijk je of er eventueel een meewerkend voorwerp in.
1 Zie ook identiteit.pdf willen denkenvoelen 5 Zie ook identiteit.pdf.
12 sept 2013 Bodegraven 1. 2  vooraf lezen: 1Kor.7:12 t/m 24  indeling 1Korinthe 7  1 t/m 9: over het huwelijk  10 t/m 16: over echtscheiding  16.
13 november 2014 Bodegraven 1. 2 de vorige keer: 1Kor.15:29-34 indien er geen doden opgewekt worden...  vs 29: waarom dopen?  vs.30-32: waarom doodsgevaren.
1 Week /03/ is gestart in mineur De voorspellingen van alle groten der aarden dat de beurzen zouden stijgen is omgekeerd uitgedraaid.
2020 Boer of mineralenmanager? 1. Evenwicht? Bodem & vakmanschap Info DMS % %
1 DE ADVIEZEN VAN BEURSMAKELAAR BERNARD BUSSCHAERT Week Us$ stijgt en de VS markten en grondstoffen markten+ obligatie markten storten ineen.
1 DE ADVIEZEN VAN BEURSMAKELAAR BERNARD BUSSCHAERT Week
23 mei 2013 Bodegraven vanaf hoofdstuk 6: hoofdst.1: de wijsheid van de wereld hoofdst.2: de wijsheid van God hoofdst.3: Gods akker en Gods bouwwerk.
1 DE ADVIEZEN VAN BEURSMAKELAAR BERNARD BUSSCHAERT Week
Transcript van de presentatie:

Parsing 1

Situering Contextvrije grammatica’s Predictive (of recursive-descent) parsing LR-parsing Parser generator: Yacc Error recovery 2

Situering Contextvrije grammatica’s Predictive (of recursive-descent) parsing LR-parsing Parser generator: Yacc Error recovery 3

Situering 4

Contextvrije grammatica’s Predictive (of recursive-descent) parsing LR-parsing Parser generator: Yacc Error recovery 5

Contextvrije grammatica’s Afleidingen staan centraal Beschouw volgende regels: 6 “S”, “E” en “L” zijn non-terminals “id”, “print”, “num”, enz. zijn terminals

Afleiding van een zin: id := num; id := id + (id := num + num, id) 7

Ambiguïteiten 8

Elimineren van ambiguïteit: Lukt niet voor alle contextvrije talen! 9

Situering Contextvrije grammatica’s Predictive (of recursive-descent) parsing LR-parsing Parser generator: Yacc Error recovery 10

Predictive (of recursive-descent) parsing 11

FIRST en FOLLOW sets FIRST(γ): alle terminals die aan het begin van een afleiding uit γ kunnen staan FOLLOW(X): alle terminals die direct kunnen volgen op een afleiding uit X – zij X een non-terminal en a een terminal – in S -> αXaβ is a ∈ FOLLOW[X] 12

Initialiseer voor elke terminal Z: FIRST[Z] = {Z} for alle afleidingsregels X -> Y 1 Y 2 … Y k for i = 1..k for j = i+1..k if alle Y i zijn nullable then nullable[X] = true if Y 1 … Y i-1 zijn nullable then FIRST[X] = FIRST[X] ∪ FIRST[Y i ] if Y i+1 … Y k zijn nullable then FOLLOW[Y i ] = FOLLOW[Y i ] ∪ FOLLOW[X] if Y i+1 … Y j-1 zijn nullable then FOLLOW[Y i ] = FOLLOW[Y i ] ∪ FIRST[Y j ] Herhaal tot FIRST, FOLLOW en nullable niet zijn veranderd tijdens deze iteratie 13

Predictive parsing table voorgaande grammatica: 14 Voer regel X -> γ in: in rij X, kolom T voor alle T ∈ FIRST(γ) als γ de lege string kan afleiden, dan ook in rij X kolom T voor alle T ∈ FOLLOW[X] Indien er in elke cel maar één regel staat, is de grammatica LL(1)

Error recovery voor predictive parsing Door invoegen van geldige token – Gevaar voor oneindig lange foutherstel Door verwijderen – Sla tokens over tot een token in FOLLOW bereikt is 15

Situering Contextvrije grammatica’s Predictive (of recursive-descent) parsing LR-parsing Parser generator: Yacc Error recovery 16

LR-parsing LR(k)-parsing: onderhoud een stack, kijk k tokens vooruit in de input Terminologie: Shift: duw token van input op de stack Reduce: neem exact die tokens van de rechterzijde van een regel weg van de stack, duw symbool van linkerzijde van die regel op stack 17

18

19

LR(0) parser generator Gegeven grammatica: 20

Beschouw: 21 S’ ->.S$ S ->.x S ->.(L) Dit is een toestand: Een productieregel is een item Punt: huidige positive van de parser

Zij I een toestand en X een symbool aan de rechterzijde van een productieregel: Closure(I) = repeat for alle items A -> α.Xβ in I for alle productieregels X -> γ I.γ } until I verandert niet return I Goto(I,X) = J <- { } for alle items A -> α.Xβ in I J αX.β } return Closure(J) 22

Zij T een verzameling toestanden ComputeR(T) = R <- { } for elke toestand I in T for elke item A -> α. in I R α) } Voeg de acties in R toe aan T 23

Volledig algoritme Zij T de toestanden en E de bogen T.S$ } ) } E <- { } repeat for elke toestand I in T for alle items A -> α.Xβ in I J <- Goto(I,X) T <- T ∪ { J } E x J } until E en T veranderen niet in deze iteratie Voer ComputeR(T) uit 24

25

26

LR(1) parser generator Uitbreiding concept van item: – (A -> α.β, x) – α bovenaan de stack, x is lookahead symbool 27

Closure(I) = repeat for alle items (A -> α.Xβ, z) in I for alle productieregels X -> γ for alle w ∈ FIRST(βz) I.γ, w) } until I verandert niet return I Goto(I,X) = J <- { } for alle items (A -> α.Xβ, z) in I J αX.β, z) } return Closure(J) 28

ComputeR(T) = R <- { } for elke toestand I in T for elke item (A -> α., z) in I R α) } Voeg de acties in R toe aan T 29

30

LR(1) en ambiguïteiten Beschouw: S -> if E then S else S S -> if E then S S -> other Hoe het volgende interpreteren? if a then if b then s1 else s2 31

Situering Contextvrije grammatica’s Predictive (of recursive-descent) parsing LR-parsing Parser generator: Yacc Error recovery 32

Parser generator: Yacc parser declarations % grammar rules % programs 33

34

35

Operator precedentie 36 Bovenaan de stack: E * E, lookahead: + Shift leidt tot E * (E + E) Reduce leidt tot (E * E) + E -> wenselijk Dus: los conflict op door voorkeur aan reduce

Associativeit Indien links-associativiteit gewenst: reduce Indien de programmeur expliciet moet zijn: non-associativiteit Yacc-directieven voor precedentie: %nonassoc EQ NEQ %left PLUS MINUS %left TIMES DIV %right EXP Volgorde van directieven van belang! 37

38

Syntax vs semantiek 39

Conflict: booleaanse variabele of arithmetische variabele? Semantische analyse moet uitsluitsel geven 40

Situering Contextvrije grammatica’s Predictive (of recursive-descent) parsing LR-parsing Parser generator: Yacc Error recovery 41

Error recovery Local error recovery: introduceer error- recovery productions, bv. in: exp -> ID exp -> exp + exp exp -> ( exps ) exps -> exp exps -> exps ; exp Voeg toe: exp -> ( error ) exps -> error ; exp 42

Globaal foutherstel Doel: vind kleinste set toevoegingen en verwijderingen om bronstring om te vormen tot syntactisch correcte string 43

Burke-Fisher foutherstel Bij foutdetectie op positie A: probeer alle mogelijke herstellingen van token A – K tot A Herstel dat toelaat het verste te parsen na de fout is de beste (men neemt vaak genoegen met 4 posities na de fout) 44

45

Voorstel examenvragen Leg uit hoe Burke-Fisher foutherstel werkt. Wat zou een mogelijke reden kunnen zijn om dit te verkiezen boven lokaal foutherstel? (gegeven output in de vorm van een toestandsmachine door Yacc met een shift/reduce-conflict; er is ook gegeven aan welke precedentieregels alle operatoren moeten voldoen) Hoe zou jij het conflict gesignaleerd in onderstaande toestandsmachine oplossen? Leg je redenering uit. (gegeven een contextvrije grammatica) Is de volgende contextvrije grammatica LL(1)? Beargumenteer je antwoord. 46