Syntaktická analýza Flashcards
Aké sú úlohy syntaktickej analýzy?
Číta postupnosť tokenov generovanú lexikálnym analyzátorom a konštruuje strom odvodenia/syntaktický strom
Hlási syntaktické chyby ”inteligentným” spôsobom (zotavenie)
Na akom leveli pracuje syntaktická analýza?
Bezkontextové jazyky
Opíš rozhranie parsera
Aké poznáme 3 metódy syntaktickej analýzy?
Univerzálne - CYK napr., neefektívne
Zhora nadol - LL, z koreňa k listom
Zdola nahor - z listov ku koreňu, pravé krajné, LR
Kedy nastane chyba pri syntaktickej analýze? (parsovaní)
ked’ postupnost’ tokenov nezodpovedá pravidlám gramatiky
Prečo LL a LR metódy vedia chyby detekovať hneď?
Majú vlastnost’ životaschopného prefixu a chyba sa odhalí hned’ ako prefix vstupu nie je prefixom žiadneho slova
Ako sa dajú ošetriť chyby?
Hlásenie chyby - miesto detekovania a chybová hláška
Zotavenie sa z chyby - veľa stratégií, Parser sa pokúša dostat’ do stavu, z ktorého môže
pokračovat’ v spracovávaní vstupu
Je potrebný kompromis
Aký je problém metódy kde sa parser chce dostať do stavu kde môže pokračovať v parsovaní?
zotavenie z jednej chyby spôsobí d’al’šie, riešením môže byt’ konzervatívna stratégia
Aké poznáme stratégie zotavenia sa z chýb?
Zotavenie v móde paniky
Zotavenie na úrovni frázy
Zotavenie pomocou chybových pravidiel
Zotavenie pomocou globálnych korekcií
Opíš Zotavenie na úrovni frázy
Ked’ sa nájde chyba, parser vykoná lokálnu korekciu (Prefix zostávajúceho vstupu sa nahradí iným ret’azcom)
nevýhoda - Je zložité ošetrovat’ chyby, ktoré sa vyskytujú d’aleko pred bodom detekcie
Opíš zotavenie v móde paniky
Zvolí sa množina synchronizaňných tokenov (vzhl’adom na vsupný jazyk)
Pri detekovaní chyby sa vynechá čast’ vstupu až kým sa nenájde synchronizačný token
nevýhoda - vynechá veľkú časť vstupu
Opíš Zotavenie pomocou chybových pravidiel
Rozšírime gramatiku o chybové pravidlá
Z gramatiky skonštruujeme parser, ktorý pri použití chybového pravidla generuje diagnostické hlásenie
Zotavenie pomocou globálnych korekcií
Používajú sa algoritmy pre hl’adanie najvýhodnejšej korekcie (vyžadujúcej minimálnu postupnost’ zmien)
Drahé ale zaujímavé z teoretického hľadiska
Opíš bezkontextové gramatiky
Opíš odvodenie v bezkontextovej gramatike
Čo je to strom odvodenia
Grafická reprezentácia odvodenia, každý vnútorný uzol zodpovedá aplikácii pravidla
Neznázorňuje poradie aplikovania pravidiel
Aká je to nejednoznačná gramatika?
Pre nejaké slovo existujú dva rôzne stromy odvodenia
Čo musíme spraviť aby bola gramatika vhodná na parsovanie v každom pripade?
Eliminácia nejednoznačnosti
Čo musíme spraviť aby bola gramatika vhodná na parsovanie v parsovaní zhora nadol?
Eliminácia l’avej rekurzie
Ľavá faktorizácia
Opíš algoritmy eliminácie ľavej rekurzie
Opíš algoritmus ľavej faktorizácie
Pri parsovaní zhora-nadol sa generuje aké odvodenie?
Ľavé krajné
Opíš algoritmus rekurzívneho zostupu zhora-nadol
Opíš algoritmus prediktívneho parsovania zhora-nadol
Ako skonštruujeme prechodový diagram z gramatiky?
Aký je význam prechodov na prechodových diagramoch?
Prechod na terminál a - Posun na vstupe o jeden znak doprava (prečítaný symbol
musí byt’ a)
Prechod na neterminál A - volanie procedúry pre A
Aké 2 funkcie potrebujeme pre implementáciu prediktívneho parsera?
FIRST(α) - Možina terminálov, ktorými môže začínat’ ret’azec odvodený
z α
FOLLOW (A), A ∈ N - Množina terminálov a, ktoré sa môžu vyskytnút’ hned’ vedl’a
A v nejakej vetnej forme, aj $ ak môže byť A posledný vo vetnej forme
Opíš algoritmus výpočtu FIRST
Opíš výpočet FOLLOW
Opíš implementáciu pomocou rekurzívnych procedúr
slajdy, na konci pvej preze
Opíš implementáciu pomocou zásobníka
slajdy na konci prvej preze
Opíš zotavenie z chýb pri prediktívnom parsovaní
Opíš LL(1) gramatiky
LL(1) je trieda CF gramatík, pre ktorú vieme zostrojit’ prediktívne parsery
L - čítame zľava doprava, L - ľavé krajné odvodenie, 1 - 1 lookahead
Aké CF gramatiky nie sú LL(1)?
Nejednoznačné a l’avorekurzívne gramatiky nie sú LL(1)
Kedy je gramatika LL(1)?
Aká je výhoda parsovanie zhora nadol?
Parsery zhora-nadol sa l’ahšie ručne implementujú ako parsery zdola-nahor
Aká je nevýhoda parsovania zdola nahor?
Gramatika je po úpravách neprehl’adná a t’ažšie sa pre ňu definuje preklad
Ako funguje algoritmus CYK?
Pozri FOJA skriptá
Opíš parsovanie zdola nahor
Pre vstupný ret’azec sa konštruuje strom odvodenia od listov ku koreňu
Hovoríme o redukcii vstupného ret’azca na počiatočný symbol gramatiky
Ciel’om je získat’ pravé krajné odvodenie
Akú metódu používame pri parsovaní zdola nahor?
posun-redukcia (shift-reduce)