Page 1 GRAMATYKI GENERATYWNE Def. Gramatyką generatywną
Transkrypt
Page 1 GRAMATYKI GENERATYWNE Def. Gramatyką generatywną
GRAMATYKI GENERATYWNE Def. Gramatyką generatywną nazywamy układ G = (Σ, N , S , P ) taki, że - Σ jest skończonym alfabetem (podstawowym), Σ ≠ ∅ , - N jest skończonym alfabetem (pomocniczym), Σ∩ N = ∅, - S ∈ N (symbol początkowy), - P jest skończonym zbiorem reguł produkcji postaci x a y , gdzie x, y ∈ (Σ ∪ N )∗ , x ≠ y . Def. Niech G = (Σ, N , S , P ) będzie gramatyką generatywną. Określamy relację x →G y (G bezpośrednio przeprowadza x w y) następująco: x →G y jeżeli istnieją z , u , w, z′ , takie że (u a w) ∈ P , x = zuz′ , y = zwz′ . Określamy relację x →∗G y (G przeprowadza x w y) następująco: x →∗G y jeżeli istnieją x0 ,K, xn , n ≥ 0 , takie że x = x0 , y = xn oraz xi −1 →G xi dla każdego 1 ≤ i ≤ n . Def. Język generowany przez gramatykę G = (Σ, N , S , P ) : L(G ) = x ∈ Σ∗ : S →∗G x . { } Def. Gramatykę generatywną G = (Σ, N , S , P ) nazywamy bezkontekstową, jeżeli wszystkie reguły produkcji tej gramatyki maja postać A a x, gdzie A ∈ N , x ∈ (Σ ∪ N )∗ . Języki generowane przez gramatyki bezkontekstowe nazywamy językami bezkontekstowymi. Def. Gramatyki G1 i G2 są równoważne , jeżeli generują te same języki, tzn. L(G1 ) = L(G2 ). Fakt. Dla każdej gramatyki bezkontekstowej istnieje równoważna gramatyka bezkontekstowa w postaci normalnej Chomsky’ego, tzn. gramatyka zawierająca tylko produkcje postaci: A a BC , A, B, C ∈ N , B, C ≠ S . A a a, A∈ N , a ∈ Σ. S aε Algorytm CYK sprawdzania, czy słowo należy do języka generowanego przez gramatykę bezkontekstową. Algorytm CYK (Cocke – Younger – Kasami) służy do sprawdzania, czy słowo należy do języka generowanego przez gramatykę bezkontekstową G w postaci normalnej Chomsky’ego. Przypuśćmy, że słowo w = a1 K an jest długości n. Tworzymy tabelę dwuwymiarową, która w i-tym wierszu i j-tej kolumnie (1 ≤ j ≤ n − i + 1) zawiera te zmienne gramatyki G, które generują podsłowo a j K a j + i −1 (jest to podsłowo długości i zaczynające się od j-tej litery). Niech X ij oznacza zbiór zmiennych wypisanych w i-tym wierszu i j-tej kolumnie. Elementy tabeli budujemy indukcyjnie. Podstawa indukcji: i = 1, wypełniamy pierwszy wiersz tabeli. Jeżeli A a a j jest produkcją, to A ∈ X 1 j (A zostaje zapisane w j-tej kolumnie). Krok indukcyjny: zakładamy, że wiersze i = 1,K, m − 1 zostały wypełnione. Wypełniamy wiersz o numerze m. Jeżeli w zbiorze produkcji jest A a BC oraz istnieje k < m takie, że B ∈ X kj ∧ C ∈ X m − k , j + k , to A zapisujemy do X mj . Jeżeli S ∈ X n1, to oznacza że w ∈ L(G ) . Złożoność algorytmu CYK jest ograniczona przez T (n ) = n3 . Przykład Dla gramatyki G z produkcjami: S a AB S a BC A a BA Aa a B a CC Bab C a AB Caa dla słowa w = baaba otrzymujemy tabelę j 1 2 3 4 5 w b a a b a 1 B A,C A,C B A,C 2 A,S B S,C A,S B B i 3 ∅ 4 ∅ 5 A,S,C S,C,A Ponieważ S ∈ X n,1 = {A, S , C}, słowo w ∈ L(G ) . Na podstawie powyższej tabeli możemy odtworzyć wyprowadzenia danego słowa, np.: S ⇒ B(1,1)C (4,2 ) ⇒ bA(1,2 )B(3,3) ⇒ baC (2,3)C (1,5) ⇒ ⇒ baA(1,3)B(1,4 )a ⇒ baaba