Automaty a gramatiky

Podobné dokumenty
Automaty a gramatiky. Uzávěrové vlastnosti v kostce R J BKJ DBKJ. Roman Barták, KTIML. Kvocienty s regulárním jazykem

Jednoznačné a nejednoznačné gramatiky

Čísla značí použité pravidlo, šipka směr postupu Analýza shora. Analýza zdola A 2 B 3 B * C 2 C ( A ) 1 a A + B. A Derivace zleva:

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LL SYNTAKTICKÁ ANALÝZA DOKONČENÍ, IMPLEMENTACE.

Automaty a gramatiky(bi-aag) Motivace. 1. Základní pojmy. 2 domácí úkoly po 6 bodech 3 testy za bodů celkem 40 bodů

doplněk, zřetězení, Kleeneho operaci a reverzi. Ukážeme ještě další operace s jazyky, na které je

AUTOMATY A GRAMATIKY. Pavel Surynek. Kontextové uzávěrové vlastnosti Turingův stroj Rekurzivně spočetné jazyky Kódování, enumerace

Výpočetní modely pro rozpoznávání bezkontextových jazyků zásobníkové automaty LL(k) a LR(k) analyzátory

Konstrukce relace. Postupně konstruujeme na množině všech stavů Q relace i,

Turingovy stroje. Teoretická informatika Tomáš Foltýnek

Bezkontextové jazyky. Bezkontextové jazyky 1 p.1/39

Bezkontextové jazyky 2/3. Bezkontextové jazyky 2 p.1/27

Z. Sawa (VŠB-TUO) Teoretická informatika 5. listopadu / 43

Vztah jazyků Chomskeho hierarchie a jazyků TS

Kapitola 6. LL gramatiky. 6.1 Definice LL(k) gramatik. Definice 6.3. Necht G = (N, Σ, P, S) je CFG, k 1 je celé číslo.

Vlastnosti Derivační strom Metody Metoda shora dolů Metoda zdola nahoru Pomocné množiny. Syntaktická analýza. Metody a nástroje syntaktické analýzy

Automaty a gramatiky. Roman Barták, KTIML. Separované gramatiky. Kontextové gramatiky. Chomského hierarchie

Množinu všech slov nad abecedou Σ značíme Σ * Množinu všech neprázdných slov Σ + Jazyk nad abecedou Σ je libovolná množina slov nad Σ

/1: Teoretická informatika(ti) přednáška 4

Formální jazyky a gramatiky Teorie programovacích jazyků

Naproti tomu gramatika je vlastně soupis pravidel, jak

2 Formální jazyky a gramatiky

Regulární výrazy. Definice Množina regulárních výrazů nad abecedou Σ, označovaná RE(Σ), je definována induktivně takto:

Automaty a gramatiky

Syntaxí řízený překlad

Virtuální počítač. Uživatelský program Překladač programovacího jazyka Operační systém Interpret makroinstrukcí Procesor. PGS K.

/01: Teoretická informatika(ti) přednáška 5

Bezkontextové gramatiky. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května / 49

Bezkontextové jazyky. Bezkontextové jazyky 1 p.1/31

Automaty a gramatiky. Úvod do formáln. lních gramatik. Roman Barták, KTIML. Příklady gramatik

Implementace LL(1) překladů

Vlastnosti regulárních jazyků

Automaty a gramatiky. Roman Barták, KTIML. Chomského normální forma

Automaty a gramatiky(bi-aag) Formální překlady. 5. Překladové konečné automaty. h(ε) = ε, h(xa) = h(x)h(a), x, x T, a T.

Formální jazyky a automaty Petr Šimeček

Zásobníkový automat. SlovoaaaabbbbpatřídojazykaL={a i b i i 1} a a a a b b b b

Výroková a predikátová logika - II

AUTOMATY A GRAMATIKY

Automaty a gramatiky. Na zopakování X*/~ Roman Barták, KTIML. Iterační (pumping) lemma. Pravidelnost regulárních jazyků

Výroková a predikátová logika - II

Minimalizace KA - Úvod

Strukturální rozpoznávání

Stromové rozklady. Definice 1. Stromový rozklad grafu G je dvojice (T, β) taková, že T je strom,

Teoretická informatika

Učební texty k státní bakalářské zkoušce Programování Základy teoretické informatiky. študenti MFF 15. augusta 2008

MATICE. a 11 a 12 a 1n a 21 a 22 a 2n A = = [a ij]

Výroková a predikátová logika - II

Bezkontextové jazyky 3/3. Bezkontextové jazyky 3 p.1/27

Pumping lemma - podstata problému. Automaty a gramatiky(bi-aag) Pumping lemma - problem resolution. Pumping lemma - podstata problému

Naproti tomu gramatika je vlastně soupis pravidel, jak

Základy teoretické informatiky Formální jazyky a automaty

Výroková a predikátová logika - IV

Syntaktická analýza. Implementace LL(1) překladů. Šárka Vavrečková. Ústav informatiky, FPF SU Opava

UČEBNÍ TEXTY VYSOKÝCH ŠKOL. Prof. RNDr. Milan Češka, CSc. Gramatiky a jazyky

4.2 Syntaxe predikátové logiky

= je prostý orientovaný graf., formálně c ( u, v) 0. dva speciální uzly: zdrojový uzel s a cílový uzel t. Dále budeme bez

Regulární výrazy. M. Kot, Z. Sawa (VŠB-TU Ostrava) Úvod do teoretické informatiky 14. března / 20

Teoretická informatika TIN 2013/2014

Západočeská univerzita FAKULTA APLIKOVANÝCH VĚD

Bezkontextové gramatiky nad volnými grupami

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LEXIKÁLNÍ ANALÝZA

Modely Herbrandovské interpretace

Teoretická informatika - Úkol č.1

Výroková a predikátová logika - IX

BRNO UNIVERSITY OF TECHNOLOGY FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF INTELLIGENT SYSTEMS MASTER S THESIS AUTHOR

Vektorové podprostory, lineární nezávislost, báze, dimenze a souřadnice

Fakulta informačních technologií. Teoretická informatika

Dijkstrův algoritmus

Programovací jazyk Pascal

Analýza Petriho sítí. Analýza Petriho sítí p.1/28

Výroková a predikátová logika - III

Lexikální analýza Teorie programovacích jazyků

Teoretická informatika

Postův korespondenční problém. Meze rozhodnutelnosti 2 p.1/13

Výroková a predikátová logika - VIII

Lineární algebra Kapitola 1 - Základní matematické pojmy

ZÁKLADY TEORETICKÉ INFORMATIKY

VI. Maticový počet. VI.1. Základní operace s maticemi. Definice. Tabulku

popel, glum & nepil 16/28

Výroková a predikátová logika - X

Výroková a predikátová logika - IX

Lineární algebra : Násobení matic a inverzní matice

Výroková a predikátová logika - VIII

Výroková a predikátová logika - V

Každé formuli výrokového počtu přiřadíme hodnotu 0, půjde-li o formuli nepravdivou, a hodnotu 1, půjde-li. α neplatí. β je nutná podmínka pro α

Na rozšiřující přednášce minulý týden jsme se věnovali zejména. algoritmu, který k zadanému konečnému automatu sestrojí ekvivalentní regulární výraz

4 Stromy a les. Definice a základní vlastnosti stromů. Kostry grafů a jejich počet.

Algoritmizace. 1. Úvod. Algoritmus

Formální systém výrokové logiky

Pro každé formule α, β, γ, δ platí: Pro každé formule α, β, γ platí: Poznámka: Platí právě tehdy, když je tautologie.

Překladač sestrojující k regulárnímu výrazu ekvivalentní konečný automat Připomeňme si jednoznačnou gramatiku G pro jazyk RV({a, b})

Úvod do informatiky. Miroslav Kolařík

10 Funkce více proměnných

Výroková a predikátová logika - III

1) Sekvenční a paralelní gramatiky

Lineární algebra : Násobení matic a inverzní matice

Výroková a predikátová logika - XII

Obyčejnými diferenciálními rovnicemi (ODR) budeme nazývat rovnice, ve kterých

Unární je také spojka negace. pro je operace binární - příkladem může být funkce se signaturou. Binární je velká většina logických spojek

FAKULTA INFORMAČNÍCH TECHNOLOGIÍ

Transkript:

Automaty a gramatiky Roman Barták, KTIML bartak@ktiml.mff.cuni.cz http://ktiml.mff.cuni.cz/~bartak Co bylo minule Úvod do formálních gramatik produkční systémy generativní gramatika G=(V N,V T,,P) G = ({},{0,1},,{ 01, 01}), Chomského hierarchie rekurzivně spočetné jazyky L 0 : kontextové jazyky L 1 : bezkontextové jazyky L 2 : regulární/pravé lineární jazyky L 3 : uspořádání: L 0 L 1 L 2 L 3 u v αxβ αwβ, w >0 X w X wy, X w Pravě lineární gramatiky pravidla ve tvaru X wy, X w, X,Y V N, w V T * ekvivalence s konečnými automaty lineární gramatiky 1

Chomského hierarchie gramatiky typu 0 (rekurzivně spočetné jazyky L 0 ) pravidla v obecné formě gramatiky typu 1 (kontextové jazyky L 1 ) pouze pravidla ve tvaru αxβ αwβ, X V N, α,β (V N V T )*, w (V N V T ) + jedinou výjimkou je pravidlo λ, potom se ale nevyskytuje na pravé straně žádného pravidla gramatiky typu 2 (bezkontextové jazyky L 2 ) pouze pravidla ve tvaru X w, X V N, w (V N V T )* gramatiky typu 3 (regulární/pravé lineární jazyky L 3 ) pouze pravidla ve tvaru X wy, X w, X,Y V N, w V T * Bezkontextové gramatiky pouze pravidla ve tvaru X w, X V N, w (V N V T )* velký praktický význam definování syntaxe vyšších programovacích jazyků konstrukce kompilátorů <Program> <Příkaz> <Příkaz> <Program> <Příkaz> <IF-příkaz> <WHILE-příkaz> <Přiřazení> <IF-příkaz> if <Test> then <Příkaz> else <Příkaz> <WHILE-příkaz> while <Test> do <Příkaz> <Přiřazení> <Proměnná> := <Výraz> Bude nás zajímat: jednoznačnost gramatiky (kvůli překladu) analýza pomocí zásobníkových automatů vlastnosti BKG obecně 2

Redukované bezkontextové gramatiky Redukce (gramatiky) = vyřazení zbytečností u konečných automatů: dosažitelné stavy, které nejsou ekvivalentní redukt určen jednoznačně u bezkontextových gramatik: dosažitelné neterminály, které něco generují zde slabší význam (nemáme jednoznačnost) Bezkontextová gramatika G (taková, že L(G) ) se nazývá redukovaná, jestliže: 1)pro každý neterminál X existuje alespoň jedno terminální slovo w takové, že X * w 2)pro každý neterminál X různý od existují slova u, v tak, že * uxv (dosažitelnost). Redukce bezkontextových gramatik aa ab A BC B ba D ab λ Zjevně stačí pravidlo ab, ostatní pravidla (neterminály) jsou zbytečná Tvrzení: Ke každé bezkontextové gramatice G takové, že L(G) lze sestrojit ekvivalentní redukovanou gramatiku. Důkaz (idea): 1) vyhoď neterminály, které negenerují terminální slovo 2) vyhoď nedosažitelné neterminály Poznámka: pořadí akcí nelze prohodit! ab A A BC B b ab B b 3

Algoritmus redukce - krok 1 hledáme V = {X X V N, w V T * X *w} obvyklý postup (iterace po krocích): V 0 = V T V i+1 = V i {X X V N, w V i * (X w) P} V 0 V 1 V T V N + stabilizace ( k V k = V k+1 = ) + V = V k V N Zároveň víme, zda L(G) (L(G) V) Nyní z gramatiky odstraníme všechna pravidla obsahující na levé či pravé straně neterminál nepatřící do V. a) máme splněn bod 1) definice redukované gramatiky pro X V víme: w V T * X *w + použitá pravidla nebyla odstraněna b) získaná gramatika G je ekvivalentní s původní gramatikou G L(G ) L(G) zřejmé, L(G ) L(G) lze ukázat sporem aa ab, A BC, B ba, D ab λ V = {,B,D} redukovaná pravidla: ab, B ba, D ab λ Algoritmus redukce - krok 2 (dosažitelnost) hledáme U = {X X V N, *uxv} obvyklý postup (iterace po krocích): U 0 = {} U i+1 = U i {X X V N, Y U i (Y uxv) P} U 0 U 1 V N + stabilizace ( k U k = U k+1 = ) + U = U k Podobně jako v kroku 1 odstraníme z gramatiky všechna pravidla obsahující na levé či pravé straně neterminál nepatřící do U. a) máme splněn bod 2) definice redukované gramatiky pro X U víme: *uxv + použitá pravidla nebyla odstraněna b) získaná gramatika G je ekvivalentní s gramatikou G L(G ) L(G ) zřejmé, L(G ) L(G ) lze ukázat sporem c) platnost bodu 1) definice redukované gramatiky nebyla narušena spojením X *w a *uxv ab, B ba, D ab λ finální redukovaná pravidla: ab U = {} 4

Bezkontextové gramatiky a derivace pouze pravidla ve tvaru X w, X V N, w (V N V T )* Úmluva neterminály = velká písmena terminály = malá písmena pravidla = X u v w (pro stejnou levou stranu) Derivace w z, jestliže: x,y,v (V N V T )* tž. w=xay, z=xvy a (A v) P G: ax λ, X Xbb c ax axbb axbb axbb acbb ax ax axbb acbb acbb ax axbb axbb acbb acbb Pozorování stejná délka derivací (počet pravidel) + použita stejná pravidla liší se pořadím aplikace pravidel přepis neterminálu neovlivňuje derivaci ve zbytku slova Kanonické derivace Zdá se zbytečné zabývat se derivacemi s různým pořadím pravidel. Definice: Levé přepsání w z, jestliže se přepisuje nejlevější neterminál: v,y (V N V T )* x V T * A V N * tž. w=xay, z=xvy a (A v) P Levá derivace vzniká použitím pouze levých přepsání. Pravé přepsání a pravá derivace se definuje obdobně (vždy se přepisuje nejpravější neterminál) Lemma: Pro bezkontextové gramatiky platí: X * w právě tehdy, když existuje levá (pravá) derivace w z X Důkaz: stačí ukázat, že existence derivace implikuje existenci levé derivace xay xwy, použitím A w přepsání A w neovlivní řetězce x a y ani jejich další přepisování části x, A, y se přepisují nezávisle na sobě můžeme preferovat aplikaci některých pravidel x A y formální důkaz (indukcí dle délky derivace) x w y 5

Derivační strom Můžeme výpočet zachytit jinak než sekvencí pravidel? G: ax λ, X Xbb c a X Definice: Derivační strom je takový strom, že: λ X b b c λ každý vrchol je ohodnocen prvkem z V N V T {λ} kořen je ohodnocen (počáteční neterminál) vnitřní vrcholy jsou ohodnoceny prvkem z V N je-li A ohodnocení vrcholu a u 1,,u n jsou ohodnocení jeho potomků (bráno zleva doprava), potom (A u 1,,u n ) P je-li vrchol ohodnocen λ, potom je to list, který je jediným potomkem svého rodiče. V derivačním stromu hraje roli jak stromové uspořádání dané hranami, tak uspořádání zleva doprava. Derivace a derivační stromy Říkáme, že derivační strom dává slovo w, jestliže w je slovo složené z ohodnocení listů (bráno zleva doprava). Několik zřejmých tvrzení: * w potom existuje derivační strom, který dává w (jednoznačně daný derivací) máme-li derivační strom, který dává w, potom * w (derivace ale není určena jednoznačně) každý derivační strom jednoznačně určuje levou (a pravou) derivaci Derivační strom zastupuje derivace slova získané stejným způsobem (význam slova). Je možné mít různé derivační stromy dávající stejné slovo (pro stejnou gramatiku)? 6

Jednoznačnost a víceznačnost BKG + a slovo a+a+a a + a a a a Definice: Bezkontextová gramatika G je víceznačná (nejednoznačná), jestliže w L(G), které má dvě různé levé derivace. V ostatních případech bezkontextová gramatika je jednoznačná. Bezkontextový jazyk L je jednoznačný, jestliže existuje jednoznačná bezkontextová gramatika G tak, že L=L(G). Bezkontextový jazyk L je (podstatně) nejednoznačný, jestliže každá BKG G, taková že L=L(G) je nejednoznačná. + + + a jazyk {a i b j c k i=j j=k} je podstatně nejednoznačný pro slovo a i b i c i existují z principielních důvodů dva způsoby odvození Od víceznačnosti k jednoznačnosti Víceznačnost je potenciálním zdrojem potíží. jedno slovo = více významů U programovacích jazyků je víceznačnost nepřípustná! Příklad 1: + a a+ a víceznačná gramatika ekvivalentní jednoznačná gramatika Příklad 2: if then else if then λ slovo if then if then else má dva významy if then (if then else) nebo if then (if then) else Řešení: syntaktická chyba (Algol 60) else patří k bližšímu if (preference pořadí pravidel) závorky begin-end (asi nejčistší řešení) 7

Jednoznačnost a kompilátory E E+E E*E (E) a nejednoznačné E E+E T, T T*T F, F (E) a řeší prioritu operací Kompilace výrazu (zásobník na mezivýsledky+dva registry): (1) E E+T pop r1; pop r2; add r1,r2; push r2 (2) E T (3) T T*F pop r1; pop r2; mul r1,r2; push r2 (4) T F (5) F (E) (6) F a push a a+a*a, získáme postupnou aplikací pravidel 1,2,4,6,3,4,6,6 E E+T T+T F+T a+t a+t*f a+f*f a+a*f a+a*a posloupnost obrátíme a vybere pouze pravidla generující kód 6,6,3,6,1 nyní pravidla nahradíme příslušným kódem push a; push a; pop r1; pop r2; mul r1,r2; push r2; push a; pop r1; pop r2; add r1,r2; push r2 Analýza shora bezkontextových jazyků Jak k danému slovu a zvolené bezkontextové gramatice najdeme odpovídající derivační strom? Analýza shora konstruujeme levou derivaci dosud vygenerované slovo kontrolujeme se vstupem V každém kroku derivace můžeme slovo psát ve tvaru uv, kde u obsahuje pouze terminály (již přečtená část slova) v začíná neterminálem (zatím nehotová část) Postup hledání derivace: 1) vezmi první neterminál A z v a nahraď ho w, dle pravidla A w 2) vzniklé slovo v rozlož na xy, kde x obsahuje pouze terminály a y začíná neterminálem 3) zkontroluj x oproti vstupu a pokud je v pořádku, přidej x za u, polož v rovno y a opakuj od 1 dokud v λ 8

Realizace analyzátoru slovo generujeme na zásobník (LIFO struktura) je-li vrchol zásobníku terminál, srovnáme ho se vstupem (čteme znak) je-li vrchol zásobníku neterminál, nahradíme ho slovem dle pravidla končíme, když je zásobník prázdný (musí být přečteno celé slovo) (1) E E+T (2) E T (3) T T*F (4) T F (5) F (E) (6) F a a + a * a zásobník zbytek vstupu pravidlo E a+a*a E+T a+a*a (1) T+T a+a*a (2) F+T a+a*a (4) a+t a+a*a (6) +T +a*a krácení T a*a krácení T*F a*a (3) F*F a*a (4) a*f a*a (6) *F *a krácení F a krácení a a (6) λ λ krácení Zásobníkový automat Zásobníkovým automatem nazýváme sedmici M = (Q,X,Y,δ,q 0,Z 0,F), kde Q - neprázdná konečná množina stavů X - neprázdná konečná vstupní abeceda Y - neprázdná konečná zásobníková abeceda δ -přechodová funkce Q (X {λ}) Y P FIN (Q Y*) q 0 Q - počáteční stav Z 0 Y - počáteční zásobníkový symbol F - množina koncových stavů čtené slovo Poznámky: ZA je z principu nedeterministický vždy nahrazujeme vrchol zásobníku nemusíme číst vstupní symbol řídící jednotka zásobník 9

Výpočet zásobníkového automatu Instrukci (p,a,z) (q,w) ( (q,w) δ(p,a,z) ) lze vykonat, pokud: stav automatu je p na vstupu je symbol a (pouze pokud a λ) na vrcholu zásobníku je symbol Z Vykonání instrukce (p,a,z) (q,w) znamená: změnu stavu automatu z p na q je-li a λ, posun čtecí hlavy (přečtení písmene a) smazání vrchního symbolu zásobníku (symbolu Z) přidání slova w na zásobník (nejvýše bude první písmeno z w) Formalizace kroku zásobníkového automatu: u ituace zásobníkového automatu je trojice (p,u,v), kde: p Q, u X* (zbytek čteného slova), v Y* (obsah zásobníku). p ituace E 1 =(p,au,zv) vede bezprostředně na situaci E 2 =(q,u,wv), když p,q Q, u X*, v,w Y*, a X {λ}, Z Y, (q,w) δ(p,a,z). Píšeme E 1 E 2. ituace E vede na situaci E (E * E ), právě když E E 1, E 1 E 2 E n E v Zásobníkové automaty a jazyky Kdy končí výpočet zásobníkového automatu: zásobník je prázdný není definována žádná instrukce Přijímání koncovým stavem slovo je celé přečteno a jsme v koncovém stavu Přijímání prázdným zásobníkem slovo je celé přečteno a zásobník je vyprázdněný Nechť M je zásobníkový automat. Jazyk rozpoznávaný automatem M koncovým stavem definujeme takto: L(M) = {w w X*, v Y*, q F (q 0,w,Z 0 ) *(q,λ,v)}. Jazyk rozpoznávaný automatem M prázdným zásobníkem definujeme takto: N(M) = {w w X*, q Q (q 0,w,Z 0 ) *(q,λ,λ)}. Koncové stavy nás tady nezajímají, proto klademe F=. 10

Zásobníkový automat v příkladě L = {0 n 1 n n>0} Přijímání prázdným zásobníkem p-počáteční stav, Z-počáteční zásobníkový symbol δ(p,0,z) = {(p,a)} čte první symbol 0 δ(p,0,a) = {(p,aa)} čte další symboly 0 δ(p,1,a) = {(q,λ)} čte první symbol 1 δ(q,1,a) = {(q,λ)} čte další symboly 1 Přijímání koncovým stavem p-počáteční stav, q F -koncový stav, Z-počáteční zásobníkový symbol δ(p,0,z) = {(p,az)} čte první symbol 0 δ(p,0,a) = {(p,aa)} čte další symboly 0 δ(p,1,a) = {(q,λ)} čte první symbol 1 δ(q,1,a) = {(q,λ)} čte další symboly 1 δ(q,λ,z) = {(q F,λ)} končí 11