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: V jest skończonym zbiorem zmiennych (nieterminali, kategorii syntaktycznych) - elementy tego zbioru są oznaczane dużymi literami, T jest skończonym zbiorem terminali (symboli terminalnych, symboli końcowych) - elementy tego zbioru są oznaczane małymi literami, P jest zbiorem produkcji (reguł) przedstawiających rekurencyjną definicję języka, 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. I 2. + 3. 4. () 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. I + () 2. I a b Ia Ib I 0 I 1
Wnioskowanie rekurencyjne Reguły są stosowane od ciała do głowy. 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. Przeprowadzone wnioskowanie pozwala udowodnić, że wynikowy łańcuch należy do głowy produkcji. Opisywana metoda postępowania jest nazywana wnioskowaniem rekurencyjnym.
Wnioskowanie rekurencyjne Wyw. łańcuch Zmienna Nr produkcji a I 5 b I 6 b1 I 10 b11 I 10 a 1 b11 1 a + b11 2 (a + b11) 4 a (a + b11) 3
Wyprowadzenie Dla danej gramatyki bezkontekstowej G = (V, T, P, S): niech αaβ będzie ciągiem symboli końcowych i zmiennych, gdzie A jest zmienną (α, β (V T ), A V ). niech A γ, wtedy można zapisać αaβ αγβ. G W jednym kroku wyprowadzenia zastępuje się w dowolnym miejscu łańcucha dowolną zmienną ciałem jednej z jej produkcji.
Wyprowadzenia w gramatyce I Produkcje stosowane są w kierunku od głowy do ciała. 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). Otrzymany w ten sposób łańcuch rozwija się dalej zastępując jedną ze zmiennych ciałem jednej z jej produkcji. Opisaną metodę stosuje się, aż do momentu uzyskania łańcucha składającego się jedynie z symboli końcowych. Opisywane zastosowanie gramatyki jest nazywane wyprowadzeniem.
Wyprowadzenia prawostronne i lewostronne I Można ograniczyć liczbę wyborów, jakie należy dokonać w wyprowadzeniu łańcucha stawiając wymagania, że: 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: lewostronne I a a () a ( + ) a (I + ) a (a + ) a (a + I ) a (a + I 1) a (a + I 11) a (a + b11)
Wyprowadzenia prawostronne i lewostronne III prawostronne () ( + ) ( + I ) ( + I 1) ( + I 11) ( + b11) (I + b11) (a + b11) I (a + b11) a (a + b11)
Język gramatyki 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 G w} Jeżeli język L jest językiem pewnej gramatyki bezkontekstowej to jest on nazywany językiem bezkontekstowym.
Formy zdaniowe Najważniejszą role odgrywają wyprowadzenie z symbolu startowego - są one nazywane formami zdaniowymi. Jeżeli G = {V, T, P, S} jest gramatyką bezkontekstową to dowolny łańcuch a (V T ) taki, że S α jest formą zdaniową. Jeżeli S l α to α jest lewostronną formą zdaniową. Jeżeli S p α to α jest prawostronną formą zdaniową.
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 Y 1 Y 2...Y n, to musi istnieć produkcja X Y 1 Y 2...Y n
Drzewa wyprowadzenia II I a ( ) I + I a I a I 1 1
Plon drzewa wyprowadzeń Składając liście dowolnego drzewa wyprowadzeń od lewej do prawej można uzyskać łańcuch, który jest nazywany plonem tego drzewa. 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 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 + można wygenerować dwa wyprowadzenia dla + : 1. + + 2. +
Niejednoznaczność gramatyki + * id * + id id id id 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.. Hopcroft, R. Motwani, J.D. Ullman Wprowadzenie do teorii, automatów, języków i obliczeń, PWN 2005