opora

frantisek.plesicek
from frantisek.plesicek More from this publisher
10.02.2019 Views

KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A ZÁSOBNÍKOVÉ AUTOMATY75 E → T | T E ′ E ′ → +T | +T E ′ T → F | F T ′ T ′ → ∗F | ∗F T ′ F → (E) | i do GNF. Řešení: Podle lemmy 4.1 je E < T < F . Jako lineární uspořádání na množině nonterminálů vezměme uspořádání E ′ < E < T ′ < T < F Všechna F -pravidla začínají terminálem (důsledek skutečnosti, že F je největší prvek v uspořádání < ). Předcházející symbol T má pravidla T → F | F T ′ a po aplikaci kroku (3) dostáváme pravidla T → (E) | i | (E)T ′ | iT ′ . Výsledná gramatika v GNF má pravidla: E → (E) ′ | i | (E) ′ T ′ | iT ′ | (E) ′ E ′ | iE ′ | (E) ′ T ′ E ′ | iT ′ E ′ E ′ → +T | +T E ′ T → (E) ′ | i | (E) ′ T ′ | iT ′ T ′ → ∗F | ∗F T ′ F → (E) ′ | i ) ′ → ) Nevýhodou algoritmu 4.8 je velké množství nových pravidel. Existuje alternativní algoritmus převodu do GNF, [1], který nezvětšuje tak výrazně počet pravidel gramatiky, avšak zavádí zase více nonterminálů. Bezkontextové gramatiky umožňují popisovat většinu rysů současných vyšších programovacích jazyků. Způsob získání derivačního stromu věty v dané bezkontextové gramatice je základem syntaktické analýzy a klasifikace syntaktických analyzátorů překladačů a jazykových procesorů. Řada transformací bezkontextových gramatik a existence normálních forem bezkontextových gramatik umožňuje odstraňování některých atributů gramatiky nebo derivaci v této gramatice, jež se využívá v praktických aplikacích i v rámci důkazových technik. 4.8 Cvičení Cvičení 4.8.1 Modifikujte gramatiku G RV z příkladu 4.10 tak, aby zápisy regulárních výrazů rovněž připouštěly: (a) explicitní použití operátoru · konkatenace (např. a · b) (b) použití operátoru + ve významu r + = rr ∗ Cvičení 4.8.2 Gramatika G = ({〈deklarace〉, 〈options〉, 〈option〉, 〈mode〉, 〈scale〉, 〈precision〉, 〈base〉}, {declare, id, real, complex, fixed, floating, single, double, binary, decimal}, P, 〈deklarace〉)

KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A ZÁSOBNÍKOVÉ AUTOMATY76 s pravidly P 〈deklarace〉 → declare id 〈options〉 〈options〉 → 〈option〉 〈options〉 | ɛ 〈option〉 → 〈mode〉 | 〈scale〉 | 〈precision〉 | 〈base〉 〈mode〉 → real | complex 〈scale〉 → fixed floating 〈precision〉 → single | double 〈base〉 → binary | decimal popisuje deklaraci jednoduché proměnné. Tato gramatika však dovoluje vytvářet deklarace, které obsahují redundantní nebo rozporné informace, např. declare X real fixed real floating Zapište gramatiku, která připouští pouze deklarace bez redundancí a rozporů. Uvažte, zda je vhodné takový problém řešit prostředky definice syntaxe jazyka. Cvičení 4.8.3 Pro výpočet tranzitivního uzávěru binární relace definované na konečné množině (např. slovníku gramatiky) se velmi často používá reprezentace relace prostřednictvím booleovské matice a operací nad touto maticí. Je-li A booleovská matice reprezentující binární relaci R na množině M (tj. A[p, q] = true, je-li (p, q) ∈ R a A[p, q] = false, je-li (p, q) /∈ R, p, q ∈ M a A[p, q] je prvek matice A v řádku označeném p a sloupci označeném q), pak tranzitivní uzávěr relace R je relace R + , jenž je reprezentován maticí A + : A + = A + A 2 + . . . + A n , (3) kde n = min(|M| − 1, |R|) a operace sečítání, resp. násobení jsou interpretovány jako disjunkce, resp. konjunkce. Pro výpočet tranzitivního uzávěru existuje efektivnější postup než podle 3, nazývaný, podle autora, Warshallův algoritmus. Algoritmus 4.9 Warshallův algoritmus pro výpočet tranzitivního uzávěru binární relace. Vstup: Booleovská matice A reprezentující binární relaci R. Výstup: Booleovská matice B reprezentující binární relaci R + . Metoda: (1) Polož B = A a i = 1. (2) Pro všechna j, jestliže B[j, i] = true, pak pro k = 1, . . . , n polož B[j, k] = B[j, k] + B[i, k]. (3) Polož i = i + 1. (4) Je-li i ≤ n, vrať se ke kroku (2); v opačném případě je B výsledná matice. Ukažte, že algoritmus 4.9 počítá skutečně tranzitivní uzávěr binární relace. Cvičení 4.8.4 V gramatice z příkladu 4.3 vytvořte levou a pravou derivaci a derivační strom věty i ∗ (i + i − i). Nalezněte všechny fráze, jednoduché fráze a l-frázi této věty.

KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A ZÁSOBNÍKOVÉ AUTOMATY75<br />

E → T | T E ′<br />

E ′ → +T | +T E ′<br />

T → F | F T ′<br />

T ′ → ∗F | ∗F T ′<br />

F → (E) | i do GNF.<br />

Řešení: Podle lemmy 4.1 je E < T < F . Jako lineární uspořádání na množině<br />

nonterminálů vezměme uspořádání<br />

E ′ < E < T ′ < T < F<br />

Všechna F -pravidla začínají terminálem (důsledek skutečnosti, že F je největší<br />

prvek v uspořádání < ). Předcházející symbol T má pravidla T → F | F T ′ a po<br />

aplikaci kroku (3) dostáváme pravidla T → (E) | i | (E)T ′ | iT ′ .<br />

Výsledná gramatika v GNF má pravidla:<br />

E → (E) ′ | i | (E) ′ T ′ | iT ′ | (E) ′ E ′ | iE ′ | (E) ′ T ′ E ′ | iT ′ E ′<br />

E ′ → +T | +T E ′<br />

T → (E) ′ | i | (E) ′ T ′ | iT ′<br />

T ′ → ∗F | ∗F T ′<br />

F → (E) ′ | i<br />

) ′ → )<br />

Nevýhodou algoritmu 4.8 je velké množství nových pravidel. Existuje alternativní<br />

algoritmus převodu do GNF, [1], který nezvětšuje tak výrazně počet pravidel<br />

gramatiky, avšak zavádí zase více nonterminálů.<br />

Bezkontextové gramatiky umožňují popisovat většinu rysů současných vyšších<br />

programovacích jazyků. Způsob získání derivačního stromu věty v dané bezkontextové<br />

gramatice je základem syntaktické analýzy a klasifikace syntaktických analyzátorů<br />

překladačů a jazykových procesorů. Řada transformací bezkontextových<br />

gramatik a existence normálních forem bezkontextových gramatik umožňuje odstraňování<br />

některých atributů gramatiky nebo derivaci v této gramatice, jež se využívá v<br />

praktických aplikacích i v rámci důkazových technik.<br />

4.8 Cvičení<br />

Cvičení 4.8.1 Modifikujte gramatiku G RV z příkladu 4.10 tak, aby zápisy regulárních<br />

výrazů rovněž připouštěly:<br />

(a) explicitní použití operátoru · konkatenace (např. a · b)<br />

(b) použití operátoru + ve významu r + = rr ∗<br />

Cvičení 4.8.2 Gramatika G = ({〈deklarace〉, 〈options〉, 〈option〉, 〈mode〉,<br />

〈scale〉, 〈precision〉, 〈base〉}, {declare, id, real, complex, fixed, floating,<br />

single, double, binary, decimal}, P, 〈deklarace〉)

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!