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.

Podobne dokumenty