Presentation laddar. Vänta.

Presentation laddar. Vänta.

Växjö 22 april -04Språk & logik: Parsning med kontextfria grammatiker1 DAB760:Språk och logik: 22 aprilParsning Leif Grönqvist

Liknande presentationer


En presentation över ämnet: "Växjö 22 april -04Språk & logik: Parsning med kontextfria grammatiker1 DAB760:Språk och logik: 22 aprilParsning Leif Grönqvist"— Presentationens avskrift:

1 Växjö 22 april -04Språk & logik: Parsning med kontextfria grammatiker1 DAB760:Språk och logik: 22 aprilParsning Leif Grönqvist Växjö Universitet (MSI) GSLT (Sveriges nationella forskarskola i språkteknologi) Göteborg Universitet (Institutionen för lingvistik)

2 2Språk & logik: Parsning med kontextfria grammatikerVäxjö 22 april -04 Dagens föreläsning  Lite om ambiguitet som inte hanns med igår  Parsning I allmänhet Recursive-Descent-parsning Problem Tabelldriven parsning

3 3Språk & logik: Parsning med kontextfria grammatikerVäxjö 22 april -04 Ambiguitet  För uttrycket finns två olika parsträd:  Eftersom det finns uttryck som kan beskrivas av flera olika parsträd så är grammatiken ambiguös  Att en grammatik är icke-ambiguös är mycket svårt att bevisa  Problem kan uppstå om evaluering av uttryck i språket blir olika beroende på parsträd: if a then if b then c else d

4 4Språk & logik: Parsning med kontextfria grammatikerVäxjö 22 april -04 Icke-ambiguös grammatik för aritmetiska uttryck  Vi lägger till nya syntaktiska kategorier för termer och faktorer: 1.  + | - | 2.  * | / | 3.  ( ) | 4.  | 5.  1|2|3|4|5|6|7|8|9|0 e=expression, t=term, f=factor, n=number, d=digit  Regel 1 och 2 garanterar att och 1/2*3 grupperas korrekt

5 5Språk & logik: Parsning med kontextfria grammatikerVäxjö 22 april -04 Parsning  Vi vill lösa två olika uppgifter  Givet en kontextfri grammatik G vill vi klara: Igenkänning: avgör om en sträng s є Σ T * ingår i språket L(G) Parsning: bygg upp ett parsträd för s om s є L(G)  Vi har sett hur parsträdet kan se ut men inte hur man systematiskt kan konstruera det  Vi skall titta på två parsningsalgoritmer som inte klarar riktigt alla kontextfria grammatiker  Att klara alla CFG går men algoritmerna är långsammare (CYK, Earley)  En annan känd algoritm är LR-parsning (Left to Right)

6 6Språk & logik: Parsning med kontextfria grammatikerVäxjö 22 april -04 Recursive-Descent-parsning  Fungerar top-down  Metoden bygger på idén att göra en funktion för varje icke-terminal-symbol  Denna funktion skall avgöra om en sträng kan härledas från sin symbol och göra ett parsträd  Fungerar bara för vissa typer av grammatiker (inte så allvarligt – se lite senare)

7 7Språk & logik: Parsning med kontextfria grammatikerVäxjö 22 april -04 Recursive-Descent, algoritmen för igenkänning  Strängen som skall parsar finns i x 1 …x n  NextTerminal innehåller x i, den senast inlästa symbolen  s Σ N finns en funktion f s som: Returnerar True om x i …x j kan härledas från s Sätter NextTerminal till x j+1  Igenkänning av x 1 …x n som en s (startsymbolen) sker genom att anropa f s  Om svaret blir True och NextTerminal är x n+1 så ingår x 1 …x n i språket, annars inte

8 8Språk & logik: Parsning med kontextfria grammatikerVäxjö 22 april -04 Recursive-Descent-igenkänning, algoritmens funktioner  f s där s är en icke-terminal symbol med m produktionsregler (exklusive en eventuell s  ε) kan konstrueras enligt: m-1 if-satser efter varandra: if(cond 1 ) { }; if(cond 2 ) { }; if(cond m ) { }; Om s  ε finns returneras true, annars false

9 9Språk & logik: Parsning med kontextfria grammatikerVäxjö 22 april -04 Recursive-Descent-parsning, algoritmens funktioner, forts.  if-satsen som svarar mot s  x 1 …x k matchar symbolerna x 1 …x k enligt:  Om x i är en terminal symbol: om x i =NextTerminal fortsätt till nästa symbol, annars returnera false  Om x i är en icke-terminal t: om f t returnerar true så fortsätt, annars returnera false  Om x 1 …x k matchats returneras true

10 10Språk & logik: Parsning med kontextfria grammatikerVäxjö 22 april -04 Funktionen för “faktor”- projektionen  Pseudokoden svarande mot:  ( ) | Boolean function factor(void) { if(*NextTerminal==‘(‘)) { NextTerminal++; if(expr()) { return *NextTerminal==‘)’; } else return false; } if(num()) return true; return false; }

11 11Språk & logik: Parsning med kontextfria grammatikerVäxjö 22 april -04 Recursive-Descent-parsning  Liknar igenkänningsalgoritmen men funktionerna modifieras: De skall returnera träd istället för boolean (misslyckad parsning returnerar NULL) Rotnoden skapas som A och svarar mot en projektion s  x 1 …x n, och har n barn:  Om x i är en terminal så skapas barn i som ett löv med etiketten x i.  Om x i är en icke-terminal så är barn i det träd som returneras av f x i

12 12Språk & logik: Parsning med kontextfria grammatikerVäxjö 22 april -04 Funktionen för “faktor”- projektionen (parsning)  Pseudokoden svarande mot:  ( ) | Tree *function factorTree(void) { if(*NextTerminal==‘(‘)) { NextTerminal++; if(expr()) { if(*NextTerminal==‘)’) return node3(“factor”, node0(‘(‘), expTree(), node0(‘)’)); else return NULL; } else return NULL; } if(num()) return node1(“factor”, numTree()); return NULL; }

13 13Språk & logik: Parsning med kontextfria grammatikerVäxjö 22 april -04 Funktionen för “balanced”- projektionen (parsning)  Pseudokoden svarande mot:  ε,  ( balanced> ) Tree *function balancedTree(void) { if(*NextTerminal==‘(‘)) { NextTerminal++; if(balanced()) { if(*NextTerminal==‘)’) { if(balanced()) return node4(“balanced”, node0(‘(‘), balancedTree(), node0(‘)’), balancedTree()); else return NULL; } else return NULL; } return node0(””); }

14 14Språk & logik: Parsning med kontextfria grammatikerVäxjö 22 april -04 Exempel på Recursive-Descent- parsning  Svårt att handexekvera rekursiva funktioner…  I boken finns exempel 11.9 som är rätt bra, med tillhörande riktig C-kod 1.  ε 2.  ( balanced> ) | Parsa: ( ) ( ) ENDM

15 15Språk & logik: Parsning med kontextfria grammatikerVäxjö 22 april -04 Problem med Recursive-Descent- parsning  Vänster-rekursion får inte förekomma, dvs regler av typen s  s x 2 …x n Dessa skulle leda till oändlig rekursion Den vänsterrekursiva regeln  a | b kan skrivas om som två regler:  b och  a | ε  Valet av produktion för en icke-terminal måste vara entydigt bestämd av första symbolen i kroppen. Problem: → | Kan skrivas om som: → → | ε

16 16Språk & logik: Parsning med kontextfria grammatikerVäxjö 22 april -04 Tabelldriven parsning  Den stora nackdelen med Recursive-Descent- parsning är att man måste skriva ett nytt program för varje grammatik  En tabelldriven parser lagrar grammatiken i en tabell men programmet är samma för alla grammatiker  Två strukturer behövs: En (tvådimensionell) tabell T:  En rad för varje icke-terminal symbol  En kolumn för varje symbol s som kan inleda en sträng, härledbar från en icke-terminal symbol  Produktionsregler i cellerna En stack för återstående symboler att matcha

17 17Språk & logik: Parsning med kontextfria grammatikerVäxjö 22 april -04 Tabelldriven parsning, algoritmen 1.Först läggs startsymbolen på stacken och NextTerminal är första symbolen i strängen som skall parsas 2.Om stacken inte är tom så poppas översta symbolen på stacken x: 1.Om x är en terminal så matchas den mot NextTerminal, om lika så läser vi nästa symbol i strängen, annars misslyckas parsningen 2.Om x är en icke-terminal så slås x, NextTerminal upp i T. Om platsen är tom så misslyckas parsningen, annars om x  x 1 …x n hittas så läggs x n …x 1 på stacken (x 1 hamnar överst). 3.Om strängen är slut och stacken tom så lyckas parsningen annars misslyckas den

18 18Språk & logik: Parsning med kontextfria grammatikerVäxjö 22 april -04 Exempel på tabelldriven parsning  På sidan 627 i boken finns i fig en grammatik: 1.  w c 2.  { 3.  s ; 4.  5.  } Tabellen T blir: Låt oss testa att parsa: {w c s ; s ; } END wc{}s;END

19 19Språk & logik: Parsning med kontextfria grammatikerVäxjö 22 april -04 Reguljära uttryck (RE) vs. kontextfria grammatiker (CFG)  I boken finns bevis för att: Varje språk som kan beskrivas av ett RE kan också beskrivas av en CFG  I beviset gås varje konstruktion i RE igenom för att visa att man kan skapa en CFG för ett godtyckligt RE RE är inte tillräckligt kraftfullt för att beskriva alla språk som kan beskrivas av en CFG  Se exempelvis på det oändliga språket: {01, 0011, , …}  Beskrivs som CFG:  0 1 | 01


Ladda ner ppt "Växjö 22 april -04Språk & logik: Parsning med kontextfria grammatiker1 DAB760:Språk och logik: 22 aprilParsning Leif Grönqvist"

Liknande presentationer


Google-annonser