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