Matematyczne Podstawy Informatyki
Transkrypt
Matematyczne Podstawy Informatyki
Matematyczne Podstawy Informatyki dr inż. Andrzej Grosser Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Rok akademicki 2013/2014 Gramatyki bezkontekstowe I Gramatyką bezkontekstową jest nazywana uporządkowana czwórka G=(V,T,P,S), gdzie: I V jest skończonym zbiorem zmiennych (nieterminali, kategorii syntaktycznych) - elementy tego zbioru są oznaczane dużymi literami, I T jest skończonym zbiorem terminali (symboli terminalnych, symboli końcowych) - elementy tego zbioru są oznaczane małymi literami, I P jest zbiorem produkcji (reguł) przedstawiających rekurencyjną definicję języka, I S jest wyróżnionym symbolem zwanym symbolem startowym. Produkcje Produkcje są zbudowane z: 1. Zmiennej definiowanej przez tą produkcję - jest ona często nazywana głową produkcji, 2. Symbolu →, 3. Łańcucha złożonego z zera lub więcej terminali i zmiennych łańcuch ten tworzy ciało produkcji. Łańcuch przedstawia jeden ze sposobów tworzenia łańcuchów w języku zmiennej będącej głową produkcji - w trakcie tego procesu symbole terminalne pozostają bez zmian, podstawiane są za każdą zmienną ciała produkcji dowolnego łańcucha, o których wiadomo, że należą do języka tej zmiennej. Przykład gramatyki I 1. E → I 2. E → E + E 3. E → E ∗ E 4. E → (E ) 5. I → a 6. I → b 7. I → Ia 8. I → Ib 9. I → I 0 10. I → I 1 Przykład gramatyki II Gramatykę z poprzedniego slajdu można zapisać również w postaci (zamiast zapisywać produkcje dotyczącego tego samego symbolu w różnych wierszach łączy się je za pomocą symbolu |: 1. E → I | E + E | E ∗ E | (E ) 2. I → a | b | Ia | Ib | I 0 |I 1 Wnioskowanie rekurencyjne I Reguły są stosowane od ciała do głowy. I Brane są łańcuchy, o których wiadomo, że należą do języka jednej ze zmiennych ciała i składane we właściwej kolejności ze wszystkimi symbolami końcowymi w ciele. I Przeprowadzone wnioskowanie pozwala udowodnić, że wynikowy łańcuch należy do głowy produkcji. I Opisywana metoda postępowania jest nazywana wnioskowaniem rekurencyjnym. Wnioskowanie rekurencyjne Wyw. łańcuch a b b1 b11 a b11 a + b11 (a + b11) a ∗ (a + b11) Zmienna I I I I E E E E E Nr produkcji 5 6 10 10 1 1 2 4 3 Wyprowadzenie Dla danej gramatyki bezkontekstowej G = (V , T , P, S): I niech αAβ będzie ciągiem symboli końcowych i zmiennych, gdzie A jest zmienną (α, β ∈ (V ∪ T )∗ , A ∈ V ). I niech A → γ, wtedy można zapisać αAβ ⇒ αγβ. G I W jednym kroku wyprowadzenia zastępuje się w dowolnym miejscu łańcucha dowolną zmienną ciałem jednej z jej produkcji. Wyprowadzenia w gramatyce I I Produkcje stosowane są w kierunku od głowy do ciała. I Na początku rozwijany jest symbol początkowy, przy zastosowaniu jednej z produkcji dla tego symbolu (wybierana jest produkcja, której głową jest symbol startowy). I Otrzymany w ten sposób łańcuch rozwija się dalej zastępując jedną ze zmiennych ciałem jednej z jej produkcji. I Opisaną metodę stosuje się, aż do momentu uzyskania łańcucha składającego się jedynie z symboli końcowych. I Opisywane zastosowanie gramatyki jest nazywane wyprowadzeniem. Wyprowadzenia prawostronne i lewostronne I I Można ograniczyć liczbę wyborów, jakie należy dokonać w wyprowadzeniu łańcucha stawiając wymagania, że: I I w każdym kroku będzie zastępowana pierwsza zmienna od lewej strony jednym z ciał jej produkcji (jest to nazywane wyprowadzeniem lewostronnym), w każdym kroku będzie zastępowana pierwsza zmienna od prawej strony jednym z ciał jej produkcji (jest to nazywane wyprowadzeniem prawostronnym). Wyprowadzenia prawostronne i lewostronne II Na przykład dla napisu a ∗ (a + b11) można przedstawić korzystając z gramatyki następujące wyprowadzenia: I lewostronne E ⇒ E ∗ E ⇒ I ∗ E ⇒ a ∗ E ⇒ a ∗ (E ) ⇒ a ∗ (E + E ) ⇒ a ∗ (I + E ) ⇒ a ∗ (a + E ) ⇒ a ∗ (a + I ) ⇒ a ∗ (a + I 1) ⇒ a ∗ (a + I 11) ⇒ a ∗ (a + b11) Wyprowadzenia prawostronne i lewostronne III I prawostronne E ⇒ E ∗ E ⇒ E ∗ (E ) ⇒ E ∗ (E + E ) ⇒ E ∗ (E + I ) ⇒ E ∗ (E + I 1) ⇒ E ∗ (E + I 11) ⇒ E ∗ (E + b11) ⇒ E ∗ (I + b11) ⇒ E ∗ (a + b11) ⇒ I ∗ (a + b11) ⇒ a ∗ (a + b11) Język gramatyki I Jeżeli G = (V , T , P, S) jest gramatyką bezkontekstową, to jej język G oznaczony jako L(G ) jest zbiorem łańcuchów symboli końcowych (terminali), które mają wyprowadzenia z symbolu startowego. ∗ L(G ) = {w ∈ T ∗ |S ⇒ w } G I Jeżeli język L jest językiem pewnej gramatyki bezkontekstowej to jest on nazywany językiem bezkontekstowym. Formy zdaniowe I Najważniejszą role odgrywają wyprowadzenie z symbolu startowego - są one nazywane formami zdaniowymi. I Jeżeli G = {V , T , P, S} jest gramatyką bezkontekstową to ∗ dowolny łańcuch a ∈ (V ∪ T )∗ taki, że S ⇒ α jest formą zdaniową. I Jeżeli S ⇒ α to α jest lewostronną formą zdaniową. I Jeżeli S ⇒ α to α jest prawostronną formą zdaniową. l p Drzewa wyprowadzenia I Drzewo wyprowadzenia to drzewo spełniające następujące warunki: 1. Każdy wierzchołek wewnętrzny jest etykietowany zmienną ze zbioru V. 2. Każdy liść etykietowany jest zmienną, symbolem końcowym lub . 3. Jeżeli wierzchołek wewnętrzny jest etykietowany zmienną X a jego dzieci są etykietowane, zaczynając od lewej symbolami Y1 Y2 ...Yn , to musi istnieć produkcja X → Y1 Y2 ...Yn Drzewa wyprowadzenia II E E ∗ E I a ( E E ) + E I I I a I a 1 1 Plon drzewa wyprowadzeń I Składając liście dowolnego drzewa wyprowadzeń od lewej do prawej można uzyskać łańcuch, który jest nazywany plonem tego drzewa. I Dla drzewa z poprzedniego slajdu plonem jest a*(a+a11). Wnioskowanie, wyprowadzenia i drzewa wyprowadzeń Dla danej gramatyki G = (V , T , P, S) równoważne są: 1. Procedura wnioskowania rekurencyjna, która rozstrzyga, że dany łańcuch końcowy w należy do zmiennej języka A. ∗ 2. A ⇒ w 3. A ⇒∗l w 4. A ⇒∗p w 5. Istnieje drzewo wyprowadzeń o korzeniu A i plonie w. Od wnioskowania do drzewa wyprowadzeń Niech G = (V , T , P, S) będzie gramatyką bezkontekstową. Jeżeli procedura wnioskowania rekurencyjnego stwierdzi, że łańcuch końcowy w należy do języka zmiennej A, to instnieje drzewo wyprowadzenia o korzeniu A i plonie w. Przekształcenie drzewa na wyprowadzenie Niech G = (V , T , P, S) będzie gramatyką bezkontekstową, jeżeli istnieje drzewo wyprowadzenia o korzeniu etykietowanym zmienną A i o plonie w, gdzie w ∈ T ∗ , wtedy w gramatyce G istnieje wyprowadzeie lewostronne A ⇒∗l w . Od wyprowadzeń do wnioskowania rekurencyjnego Niech G = (V , T , P, S) będzie gramatyką bezkontekstową, jeżeli istnieje wyprowadzenie A ⇒∗G w , gdzie w ∈ T ∗ , wtedy procedura wnioskowania rekurencyjnego zastosowana do G rozstrzyga, że w należy do języka zmiennej A. Gramatyki niejednoznaczne I I Gramatyka jest niejednoznaczna wtedy i tylko wtedy, gdy istnieje przynajmniej jeden łańcuch dla którego można znaleźć więcej niż jedno wyprowadzenie (drzewo wyprowadzeń). Np. dla gramatyki E ⇒ E + E | E ∗ E można wygenerować dwa wyprowadzenia dla E + E ∗ E : 1. E ⇒ E + E ⇒ E + E ∗ E 2. E ⇒ E ∗ E ⇒ E + E ∗ E Niejednoznaczność gramatyki E E id E + E E id * E E E id id + * E id E id Ścisła wieloznaczność 1. Język bezkontekstowy jes ściśle wieloznaczny, gdy wszystkie jego gramatyki są wieloznaczne. 2. Jeżeli choć jedna gramatyka języka L jest jednoznaczna to L jest językiem jednoznacznym. Zastosowania gramatyk bezkontekstowych 1. Gramatyki bezkontekstowe są używane do opisu języków programowania 1.1 Istnieją automatyczne sposoby przekształcania opisu języka bezkontekstowego na parser. 1.2 Bardziej zwarty opis języka. 1.3 Łatwiejsze rozszerzanie języka o nowe elementy. Literatura Do napisania materiałów wykorzystano: 1. M. Sipser “Wprowadzenie do teorii obliczeń”, WNT 2009 2. J.E. Hopcroft, R. Motwani, J.D. Ullman “Wprowadzenie do teorii, automatów, języków i obliczeń”, PWN 2005