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.

Podobné dokumenty
Turingovy stroje. Teoretická informatika Tomáš Foltýnek

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

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

Vztah jazyků Chomskeho hierarchie a jazyků TS

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

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(bi-aag) Motivace. 1. Základní pojmy. 2 domácí úkoly po 6 bodech 3 testy za bodů celkem 40 bodů

Syntaxí řízený překlad

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

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

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

Čí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:

Jednoznačné a nejednoznačné gramatiky

Vlastnosti regulárních jazyků

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

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

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

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

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

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 Σ

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

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

TOPOLOGIE A TEORIE KATEGORIÍ (2017/2018) 3. PREDNÁŠKA - KOMPAKTNÍ PROSTORY.

Modely Herbrandovské interpretace

Automaty a gramatiky

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.

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

8.3). S ohledem na jednoduchost a názornost je výhodné seznámit se s touto Základní pojmy a vztahy. Definice

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

Matematická analýza 1

Greenova funkce pro dvoubodové okrajové úlohy pro obyčejné diferenciální rovnice

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

Základy matematické analýzy

2 Formální jazyky a gramatiky

FIT ČVUT MI-LOM Lineární optimalizace a metody. Dualita. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

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

Predik atov a logika - pˇredn aˇska () Predik atov a logika - pˇredn aˇska / 16

Teoretická informatika TIN 2013/2014

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 α

PŘEDNÁŠKA 5 Konjuktivně disjunktivní termy, konečné distributivní svazy

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

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

Kapitola 1. Úvod. 1.1 Značení. 1.2 Výroky - opakování. N... přirozená čísla (1, 2, 3,...). Q... racionální čísla ( p, kde p Z a q N) R...

PŘEDNÁŠKA 2 POSLOUPNOSTI

Texty k přednáškám z MMAN3: 4. Funkce a zobrazení v euklidovských prostorech

Univerzální Turingův stroj a Nedeterministický Turingův stroj

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

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

TOPOLOGIE A TEORIE KATEGORIÍ (2017/2018) 4. PREDNÁŠKA - SOUČIN PROSTORŮ A TICHONOVOVA VĚTA.

LIMITA A SPOJITOST FUNKCE

Teoretická informatika - Úkol č.1

Riemannův určitý integrál

Teoretická informatika

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

Základy teorie množin

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

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

Vztah teorie vyčíslitelnosti a teorie složitosti. IB102 Automaty, gramatiky a složitost, /31

PŘEDNÁŠKA 7 Kongruence svazů

Sémantika výrokové logiky. Alena Gollová Výroková logika 1/23

Substituce. Petr Štěpánek. S využitím materialu Krysztofa R. Apta. Logické programování 2 1

Pojem binární relace patří mezi nejzákladnější matematické pojmy. Binární relace

Úvod do informatiky. Miroslav Kolařík

Limita a spojitost funkce a zobrazení jedné reálné proměnné

p 2 q , tj. 2q 2 = p 2. Tedy p 2 je sudé číslo, což ale znamená, že

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

Základy elementární teorie čísel

Logické programy Deklarativní interpretace

Bezkontextové gramatiky nad volnými grupami

Cvičení ke kursu Vyčíslitelnost

Návrh algoritmů pro sémantické akce při výstavbě interpretu metodou rekurzivního sestupu

Přednáška 11, 12. prosince Část 5: derivace funkce

Báze konečněrozměrných vektorových prostorů, lineární zobrazení vektorových prostorů

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

Dijkstrův algoritmus

Naproti tomu gramatika je vlastně soupis pravidel, jak

Úvod do informatiky. Miroslav Kolařík

Lineární algebra : Metrická geometrie

Přednáška 9, 28. listopadu 2014 Část 4: limita funkce v bodě a spojitost funkce

Základy elementární teorie čísel

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

ZÁKLADY TEORETICKÉ INFORMATIKY

Vrcholová barevnost grafu

Limita a spojitost funkce

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

PQ-stromy a rozpoznávání intervalových grafů v lineárním čase

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

Minimalizace KA - Úvod

Teoretická informatika

Implementace LL(1) překladů

13. přednáška 13. ledna k B(z k) = lim. A(z) = M(z) m 1. z m.

Kongruence na množině celých čísel

Třídy složitosti P a NP, NP-úplnost

1 Kardinální čísla. množin. Tvrzení: Necht X Cn. Pak: 1. X Cn a je to nejmenší prvek třídy X v uspořádání (Cn, ),

Vysoké učení technické v Brně Fakulta informačních technologií. Gramatiky nad volnými grupami Petr Blatný

Množiny, relace, zobrazení

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

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

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

Limita funkce. FIT ČVUT v Praze. (FIT) Limita funkce 3.týden 1 / 39

Transkript:

Kapitola 6 LL gramatiky 6.1 Definice LL(k) gramatik Definice 6.1. Necht G = (N, Σ, P, S) je CFG, k 1 je celé číslo. Definujme funkci FIRST G k : (N Σ) + P({w Σ w k}) předpisem FIRST G k (α) = {w Σ (α w w k) (α wx w = k x Σ )} a funkci FOLLOW G k : N P({w Σ w k}) předpisem FOLLOW G k (A) = {w Σ S γaα, w FIRST G k (α)}. Necht dále w = a 1 a 2... a n je libovolný řetěz. Pak klademe a 1... a k k < n k : w = w k n Poznámka 6.2. Necht relace L značí levou derivaci, L jako obvykle její transitivní a reflexivní uzávěr. Není těžké ukázat, že pokud bychom v definicích funkcí FIRST a FOLLOW použili L namísto, obdržíme tytéž množiny terminálních řetězů, tj. například platí: FOLLOW G k (A) = {w Σ S L xaα, w FIRST G k (α)}. K tomu stačí indukcí ověřit následující dvě tvrzení (při obvyklém značení a X, Y (N Σ) ): (1) {w Σ γ n L w} = {w Σ γ n w} a (2) je-li Y n γxβ γ x β y, pak Y L xxα α y pro nějaké α. Úmluva: V dalším textu budeme i levé derivace značit symbolem resp., pokud nebude řečeno jinak. Definice 6.3. Necht G = (N, Σ, P, S) je CFG, k 1 je celé číslo. Řekneme, že G je LL(k) gramatika, právě když pro libovolné dvě nejlevější derivace (w Σ ) (1) S waα wβα wx (6.1) (2) S waα wγα wy, podmínka (6.2) (3) k : x = k : y (6.3) implikuje rovnost β = γ. (6.4) 151

152 KAPITOLA 6. LL GRAMATIKY Řekneme, že gramatika G je LL právě když je LL(k) pro nějaké k N, jazyk L je LL(k) právě když existuje LL(k) gramatika G taková, že L = L(G). 6.2 Vlastnosti LL gramatik Věta 6.4. Každá LL(k) gramatika je jednoznačná. Důkaz. Předpokládejme, že G není jednoznačná. Pak existuje věta u L(G), která má alespoň dvě různé levé derivace: (1) S waα wβα wx = u (2) S waα wγα wy = u kde A β γ jsou dvě různá pravidla. Pak k : x = k : y =, ale β γ, a tedy G není LL(k). Věta 6.5. Je-li G levorekurzivní, pak není LL(k) pro žádné k. Důkaz. Necht G = (N, Σ, P, S). Bud A N levorekursivní neterminál, tj. A Aα pro nějaké α. Jestliže α ε, pak G není jednoznačná, a tedy ani LL(k). Jestliže α ε, necht α v, v Σ +, a A + β u, kde β Aα (použití pravidla, které již nevede k levé rekurzi A Aα). Pak existují levé derivace: (1) S waα waα k α + wβα k α wuv k α (2) S waα waα k α + waα k+1 α wuv k+1 α, kde k : uv k = k : uv k+1. Současně však muselo být (viz kroky + ) v jistém kroku derivace (1), konkrétně v části A + β, použito nějakého pravidla p 1, které již nemůže vést na levou rekurzi; v odpovídajícím kroku derivace (2), konkrétně v části A + Aα, ale bylo použito jiného pravidla p 2, které k levé rekuzi vede. Tedy p 1 p 2 a G není LL(k). Věta 6.6. Necht G = (N, Σ, P, S) je CFG. Pak G je LL(k) právě když platí podmínka: Jsou-li A β a A γ dvě libovolná různá pravidla v P, pak pro všechny nejlevější větné formy waα platí: FIRST k (βα) FIRST k (γα) =. Důkaz. Předpokládejme, že existují w, A, α, β, γ tak, jak uvedeno výše, ale FIRST k (βα) FIRST k (γα). Necht x FIRST k (βα) FIRST k (γα). Odtud (a z předpokladu o waα a z definice funkce FIRST) plyne existence dvou derivací S waα wβα wxy S waα wγα wxz a současně k : xy = k : xz, protože x FIRST k (βα) FIRST k (γα) (je-li x < k, pak y = ε = z). Jelikož máme β γ, pak G není LL(k). Naopak, předpokládejme, že G není LL(k). To jest, existují dvě různé derivace

6.3. SYNTAKTICKÁ ANALÝZA LL(1) GRAMATIK 153 S waα wβα wx S waα wγα wy takové, že k : x = k : y, ale β γ. Tedy A β a A γ jsou dvě různá pravidla, ale množiny FIRST k (βα) a FIRST k (γα) nejsou disjunktní obě obsahují řetěz k : x. Důsledek 6.7. Necht G = (N, Σ, P, S) je CFG bez ε-pravidel. Pak G je LL(1) právě když A N a pro každá dvě různá A-pravidla A β, A γ z P platí FIRST 1 (β) FIRST 1 (γ) =. Důkaz. Jelikož β ε a γ ε, pak α. FIRST 1 (βα) FIRST 1 (γα) = FIRST 1 (β) FIRST 1 (γ). Věta 6.8. Necht G = (N, Σ, P, S) je CFG. G je LL(1) gramatika právě když A N a pro každá dvě různá A-pravidla A β, A γ z P platí FIRST 1 (βfollow 1 (A)) FIRST 1 (γfollow 1 (A)) = (6.5) Důkaz. Pro β γ provedeme rozbor po případech: je-li β ε a γ ε, pak G není jednoznačná. Tedy G není LL(k) a současně průnik (6.5) je neprázdný: je roven FOLLOW 1 (A). je-li β ε a γ ε, pak tvrzení platí díky důsledku 6.7. je-li β ε a γ ε, pak z věty 6.6 pro tento případ plyne, že G není LL(1), právě když existuje levá větná forma waα tavová, že FIRST 1 (β) FIRST 1 (α), právě když FIRST 1 (βfollow 1 (A)) FIRST 1 (γfollow 1 (A)), protože FIRST 1 (α) FOLLOW 1 (A). Identicky pro případ β ε a γ ε. 6.3 Syntaktická analýza LL(1) gramatik Syntaktickou analýzu LL(k) gramatik lze provádět deterministickým zásobníkovým automatem automatem (DPDA). Požadujeme však, aby v případě, že vstupní slovo patří do jazyka, automat navíc poskytl informaci o struktuře věty (například její levé odvození, či derivační strom, resp. jednoznačné zakódování tohoto stromu). Proto automat rozšíříme o možnost zápisu výstupního symbolu na (přidanou) výstupní pásku Formální definici takového automatu s výstupem ponecháváme čtenáři. Syntaktickou analýzu ukážeme nejprve pro LL(1) gramatiky, přičemž přímo vycházíme z tvrzení věty 6.8. Necht je dána LL(1) gramatika G = (N, Σ, P, S), kde pravidla z P jsou očíslována i = 1,..., card(p ). Je-li w L(G), pak levým rozborem w nazveme posloupnost čísel pravidel použitých v levém odvození věty w.

154 KAPITOLA 6. LL GRAMATIKY DPDA A provádějící LL(1) syntaktickou analýzu vět z L(G) má jeden stav, počáteční obsah zásobníku je S$, kde S je kořen gramatiky G a $ je symbol nevyskytující se v gramatice. Automat akceptuje prázdným zásobníkem. Označme M přechodovou funkci 1 typu M : (N Σ {$}) (Σ ε) {<α, i> A α je i-té pravidlo v P } {odstraň, přijmi, chyba}, a je definována takto: 1. Je-li A α i-té pravidlo, klademe M(A, a) =<α, i> pro všechna a FIRST 1 (α). Je-li též ε FIRST 1 (α), pak M(A, b) =<α, i> pro všechna b FOLLOW 1 (A). V obou případech: je-li 2. M(a, a) = odstraň, pro všechna a Σ. 3. M($, ε) = přijmi. Automat vymaže ze zásobníku symbol $ a akceptuje. 4. M(x, a) = chyba, pro x Σ, x a. Uvedená přechodová funkce M se též někdy nazývá LL(1) tabulkou pro G, její část zkonstruovaná dle bodu 1 pak redukovanou LL(1) tabulkou. Díky Větě 6.8 se snadno nahléne, že M je přechodovou funkcí deterministického PDA (s výstupem), a to právě když G je LL(1); v opačném případě by M(A, a) obsahovala dvě různé položky < α, i > a <β, j > pro nějaká A N, a Σ {ε}. Činnost automatu lze neformálně popsat takto: 1. Je-li na vrcholu zásobníku neterminál, řekněme A, pak automat má (v obou podpřípadech) udělat krok dle bodu 1 definice funkce M. Necht první symbol ještě nezpracované části vstupu je a: automat provede ε-krok, nahradí A na vrcholu zásobníku řetězem α a na výstup zapíše i, tj. číslo použitého pravidla A α. 2. Je-li na vrcholu zásobníku terminál, řekněme a a na vstupu je rovněž a, pak (tak jako u nedetermininistické analýzy shora dolů) automat přečte ze vstupu a a z vrcholu zásobníku a odstraní. 3. Je-li na vrcholu zásobníku symbol $ (indikující prázdný zásobník) a na vstupu je (již jen) ε (indikující eof vstupního souboru), automat akceptuje (vymaže zásobník). 4. ve všech ostatních případech automat ukončí výpočet a neakceptuje. Výše uvedené úvahy lze formalizovat takto: množinu konfigurací K automatu A definujeme jako (N Σ {$}) (Σ ε) {1,..., card(p )} reprezentující obsah zásobníku, dosud nepřečteno část vstupního slova a dosud vyprodukovaný výstup. Počáteční konfigurací pro vstupní slovo w je (S$, w, ε). Na K definujeme binární relaci (krok výpočtu) takto: 1. (ax, Aγ, π) (ax, αγ, πi) jestliže M(A, a) =<α, i>. 2. (ax, aγ, π) (x, γ, π) (pozn.: v tomto případě je M(a, a) = odtraň). 3. (ε, $, π) (ε, ε, π), kde (ε, ε, π) je akceptující konfigurace a π je levý rozbor w L(G). Pro ostatní konfigurace není krok výpočtu definován. Případně je možné K rozšířit o konfiguraci chyba a definovat: 4. (ax, Xγ, π) chyba Tvrzení obsažené v bodě 3 je třeba dokázat: 1. Protože automat má jen jeden stav, v definci přechodové funkce ho neuvádíme.

6.4. SLL(K) GRAMATIKY A JEJICH ANALÝZA 155 Věta 6.9. Necht G = (N, Σ, P, S) je LL(1) gramatika, jejíž pravidla jsou očíslována i = 1,..., card(p ) a necht A s přechodovou funkcí M jsou takové, jak definováno výše. Pak platí: (S$, w, ε) (ε, ε, π) w L(G) a π je levý rozbor w. Důkaz. Idea důkazu: necht N je PDA provádějící nedeterministickou syntaktickou analýzu vět z L(G) zkonstruovaný dle lemmatu o nedeterministické syntaktické analýze shora dolů. Lze ověřit, že každý úspěšný výpočet automatu N lze simulovat výpočtem v A a též i obráceně, že ke každému akceptujícímu výpočtu v A existuje úspěšný výpočet automatu N (po případech dle definice přechodových funkcí automatů N a A). Jelikož nahrazování neterminálů na vrcholu zásobníku odpovídá levé derivaci, je π je levým rozborem w. 6.4 SLL(k) gramatiky a jejich analýza Pozorný čtenář si jistě položil otázku, zda tvrzení Věty 6.6 nejde z případu k = 1 zobecnit na k > 1. Ukážeme, že tomu tak není. Nejprve se zabývejme podmínkou (6.5) z Věty 6.6 zobecněnou pro k 1. Věta 6.10. Pro libovolnou redukovanou CFG G = (N, Σ, P, S) a libovolné k 1 celé jsou následující dvě tvrzení (6.6) a (6.7) ekvivalentní: A N. A β γ. β γ : FIRST k (βfollow k (A)) FIRST k (γfollow k (A)) = } (6.6) Pro libovolné dvě levé derivace (1) S waα wβα wx (2) S w Aα w γα w y (3) podmínka k : x = k : y implikuje rovnost β = γ. (6.7) Důkaz. Negace tvrzení (6.6) je ekvivaletní s tvrzením: A N. A β γ. β γ : y FIRST k (βfollow k (A)) FIRST k (γfollow k (A)), které je ekvivaletní tvrzení: A N. A β γ : S L waδ 1, y FIRST k (βδ 1 ), S L w Aδ 2, y FIRST k (γδ 2 ) a β γ, což je ekvivalentní negaci trvrzení (6.7) viz definice FIRST, FOLLOW a poznámka 6.2. Je tedy vidět, že každá gramatika splňující podmínku (6.7) je LL(k) gramatikou, ale obrácené tvrzení neplatí: lze ukázat (viz níže), že pro každé k > 1 existuje LL(k) gramatika taková, že nesplňuje podmínku (6.7). Má tedy smysl definovat tzv. SLL(k) gramatiky, a to (například) takto:

156 KAPITOLA 6. LL GRAMATIKY Definice 6.11. Necht G = (N, Σ, P, S) je redukovaná CFG, k 1 je celé číslo. řekneme, že G je SLL(k) gramatika, právě když pro libovolné dvě nejlevější derivace (w Σ ) (1) S waα wβα wx (2) S w Aα w γα w y, podmínka (3) k : x = k : y implikuje rovnost β = γ. Řekneme, že gramatika G je SLL právě když je SLL(k) pro nějaké k N, jazyk L je SLL(k) právě když existuje SLL(k) gramatika G taková, že L = L(G). Je tedy vidět, že syntaktická analýza SLL(k) gramatik je přímočarým rozšírením syntaktické analýzy LL(1) gramatik. Detaily (zatím) ponecháváme čtenáři. 6.5 Příloha: algoritmy pro výpočet funkcí FIRST a FOLLOW Necht Σ je abeceda, L 1, L 2 Σ, k 1. Definujeme funkci k : Σ Σ Σ takto: L 1 k L 2 = {w w = k : xy pro nějaká x L 1, y L 2 }. Je dána gramatika G = (N, Σ, P, S) a řetězec α = Y 1 Y 2 Y l, kde Y x = N Σ. 1) F I k (x) = {x} pro x Σ 2) Výpočet F I k (x) pro x N: Necht N = {X 1, X 2,..., X n }. Budeme počítat hodnotu F I k (X i ) současně pro všechny neterminály (i = 1,..., n). Necht všechna pravidla pro neterminál X i jsou tato: X i Y1 1... Yk 1 1 Y1 2... Yk 2 2... Y j 1... Y j k j Potom F I k (X i ) = [ F I k (Y1 1 ) k F I k (Y2 1 ) k... k F I k (Yk 1 1 ) ]... [ F I k (Y1 1 ) k F I k (Y2 1 ) k... k F I k (Yk 1 1 ) ]. Hodnoty F I k (X i ) jsou pevnými body uvedené soustavy rekurzivních rovnic. Počáteční hodnoty jsou F I k (X i ) =. 3) F IRST k (α) = F I k (Y 1 ) k F I k (Y 2 ) k k F I k (Y l ) Je dána gramatika G = (N, Σ, P, S). Funkce F O je definována pro A N. Postupně počítáme hodnoty: F O 1 (A) pro všechny A N, F O 2 (A) pro všechny A N. F O k (A) pro všechny A N Při výpočtu F O i (A) postupujeme následovně:

6.6. TRANSFORMACE GRAMATIK DO LL(1) TVARU 157 1) F O i (S) := {ɛ} pro počáteční neterminál S. F O i (A) := pro ostatní neterminály. 2) Pro každé pravidlo tvaru: B αaβ P, kde β ɛ F O i (A) := F O i (A) [(F I i (β) {ɛ}) i F O i 1 (B)] 3) OPAKUJ Pro každé pravidlo tvaru: B αaβ P, kde β = ɛ nebo ɛ F I 1 (β) F O i (A) := F O i (A) F O i (B) Tak dlouho, dokud se nedosáhne pevného bodu. 6.6 Transformace gramatik do LL(1) tvaru odstranění levé rekurze levá substituce odstranění konfliktu FIRST-FIRST pohlcení pravého kontextu odstranění konfliktu FIRST-FOLLOW