Wstęp do informatyki Wykład 11 Języki i gramatyki bezkontekstowe
Transkrypt
Wstęp do informatyki Wykład 11 Języki i gramatyki bezkontekstowe
Wstęp do informatyki Wykład 11 Języki i gramatyki bezkontekstowe - metody definiowania składni Literatura: J. Lyons, Chomsky, Wiedza Powszechna, Warszawa, 2002. L. Banachowski, A. Kreczmar, W. Rytter, Analiza algorytmów i struktur danych, WNT, Warszawa 1987 P.Dembiński, J. Małuszyński, Matematyczne metody definiowania języków programowania, WNT, Warszawa 1981 Terminologia: Alfabet A – skończony zbiór symboli Słowo (w j. naturalnym – zdanie, w j. programowania – program) nad alfabetem A – skończony ciąg symboli z A Słowo puste Ɛ = ciąg pusty A* – zbiór wszystkich słów nad alfabetem A,np. A={a}, to A*= {Ɛ, a, aa, aaa, … } Język nad alfabetem A – dowolny podzbiór A* Formalizm definiowania gramatyk (generacyjnych) podał Noam Chomsky. Definicja gramatyki bezkontekstowej G, jako specyfikacji (mechanizmu opisu) języka L(G) G jest to czwórka uporządkowana (N,T,P,S), co zapisuje się G=(N,T,P,S), gdzie: 1.N oraz T to skończone i rozłączne zbiory, odpowiednio alfabet symboli pomocniczych (zwanych nieterminalnymi lub nieterminalami) i podstawowych (zwanych terminalnymi lub terminalami). 2. P ≤ N x (T+N)* jest skończonym zbiorem produkcji, czyli reguł przekształcania słów zawierających nieterminale. Produkcję (X,w) zapisuje się w postaci X→w, gdzie X jest ze zbioru N, a w - ze zbioru (N+T)*. Umożliwia ona zastąpienie nieterminalu X przez słowo w (złożone z terminali i nieterminali). Proces wyprowadzania | wywodu słów języka zdefiniowanego przez gramatykę G zaczyna się od symbolu S i do poszczególnych nieterminali stosuje się którąś z produkcji ze zbioru P tak długo, aż wszystkie nieterminale znikną. To, co zostanie, czyli słowo złożone z samych terminali, nazywamy słowem wyprowadzalnym z gramatyki G. 3. wyróżniony nieterminal S jest zwany symbolem początkowym, startowym lub aksjomatem gramatyki G. Język L(G) tworzą z definicji wszystkie słowa (ciągi symboli terminalnych), które da się wyprowadzić z aksjomatu S za pomocą przekształceń określonych przez produkcje P. Gramatyki bezkontekstowe spełniają postulat rozstrzygalności języka - dla dowolnej gramatyki bezkontekstowej G=(N,T,P,S) i dowolnego słowa x∈T* można stwierdzić w skończonym czasie, czy x należy do języka L(G), czy nie. PRZYKŁAD 1 Gramatyka G1=(N,T,P,S) G1={{S}, {a}, {S→ Ɛ , S→aaS}, S} Przykłady wywodów: 1) S, Ɛ 2) S, aaS, aaaaS, aaaa Ɛ, aaaa L(G1) to zbiór pusty albo złożony ze wszystkich słów o parzystej liczbie liter a. W gramatyce G1 są produkcje rekurencyjne, np. S→aaS, więc L(G1) jest językiem nieskończonym. PRZYKŁAD 2 Gramatyka: G2 =(N,T,P,S) T={a, b, c} N={X, Y, Z, S} P={S→XYZ, X→Xa, X→a, Y→Yb, Y→b, Z→Zc, Z→c} aksjomat – S Przykład wywodu: S, XYZ, XaYZ, aaYZ, aaYbZ, aaYbbZ, aabbbZ, aabbbc Język L(G2) jest zbiorem wszystkich słów w postaci an bm ck dla n, m, k >0. Gramatyka struktur frazowych (składniowych). Pojęcie struktury frazowej na przykładzie. Drzewa wywodu Historię wyprowadzeń słowa w danej gramatyce można zapisać za pomocą drzewa wywodu. Korzeniem w tym drzewie jest aksjomat gramatyki, a jeśli do nieterminala X, który jest węzłem w drzewie, została zastosowana produkcja X→ x1,…,xn, to synami węzła X stają się elementy x1, …,xn. Umowa - nieterminale zaczynają się od wielkich liter, terminale - od małych, w pierwszej produkcji jest aksjomat; znakiem | -oznaczającym "lub" - można łączyć produkcje o tych samych lewych stronach; wówczas nie trzeba formalnie wypisywać zbiorów N, T i P; wystarczy podać zbiór produkcji. Gramatykę G2 można zapisać tak: {S→XYZ, X→Xa|a, Y→Yb|b, Z→Zc|c} Oto drzewo wywodu słowa aabbbc S / / | \ X Y Z \ / \ | X a Y b | / \ a Y b c | b Notacja BNF W notacji BNF gramatykę bezkontekstową zapisuje się w postaci skończonego zbioru reguł | definicji | równań | formuł BNF, korzystając z pewnych metasymboli. metasymbol znaczenie ::= równe z definicji | lub <> nawiasy wydzielające nieterminal, czyli nazwę definiowanej konstrukcji Znaki spacji i nowej linii nie mają znaczenia. Nie ma znaku kończącego formułę. Przykład definicji liczby całkowitej ze znakiem w notacji BNF. Notacja EBNF metasymbol znaczenie = równe z definicji | lub [x] 0 lub 1 krotne wystąpienie x {x} jedno- lub wielokrotne wystąpienie x (x|y|z) dowolny z napisów x, y, z "a" symbol terminalny a ciąg-małych-liter symbol nieterminalny . zakończenie formuły Przykład definicji w EBNF liczby całkowitej ze znakiem. Uwaga, w definicjach BNF i EBNF nie stosuje się symbolu wielokropka, czyli ... Diagramy syntaktyczne (graficzny odpowiednik EBNF) Przykład definicji liczby całkowitej ze znakiem za pomocą diagramów syntaktycznych.