Gramatyki - zti.polsl.pl
Transkrypt
Gramatyki - zti.polsl.pl
Gramatyki
Pojęcie abstrakcyjnej maszyny Turinga wykorzystano do wprowadzenia pojecia alfabetu, instrukcji i
programu. Teraz opisowe omówienie pojęć języka i gramatyki.
Do opisu obiektów matematycznych (np. algorytmów) mogą służyć języki formalne. Język formalny to
system pozwalający tworzyć napisy o budowie uznawanej za prawidłową.
Podstawą każdego języka jest alfabet (słownik), będący dowolnym skończonym zbiorem symboli.
Elementy słownika są zazwyczaj nazywane słowami, w świecie języków formalnych nazywa się je symbolami.
Cechą charakterystyczną języków jest to, że pewne ciągi słów (symboli) są rozpoznawane jako poprawne
dobrze zbudowane zdania języka, o innych ciągach słów mówi się, że są niepoprawne lub źle zbudowane.
Decyduje o tym gramatyka języka, mówiąc inaczej - składnia lub struktura języka, tzn.: skończony
zbiór reguł pozwalających odróżnić w tym języku słowa poprawne od niepoprawnych. Gramatyki formalne
generują wszystkie możliwe poprawne formalnie ciągi symboli w danym języku.
Przykład:
Gramatyka sloganów:
Zdanie podmiot orzeczenie
Podmiot cukier
Podmiot chemia
Orzeczenie krzepi, pogrubia
Orzeczenie wzmacnia
Orzeczenie ubiera
Zdanie podmiot orzeczenie cukier krzepi
(1)
Zdanie podmiot orzeczenie chemia ubiera
(2)
Zdanie podmiot orzeczenie cukier ubiera
(3)
Zdanie podmiot orzeczenie cukier wzmacnia (4)
Nie wszystkie zdania poprawnie formalnie mają sens. Aby w pełnie badać poprawność napisów trzeba
zdefiniować:
alfabet – czyli zbiór możliwych symboli,
syntaktykę – składnię języka, zbiór reguł określających dozwolone sposoby zestawiania symboli;
semantykę – zbiór reguł mówiący, które - poprawne syntaktycznie zestawienia symboli mają sens;
pragmatykę - zbiór reguł określających zakresy zastosowań zdań o zbliżonym (określonym) znaczeniu (co
lepiej mówić „cukier krzepi” czy „cukier wzmacnia”).
Syntaktycznie poprawne zdania: (1), (2), (3), (4)
Semantycznie poprawne zdania: (1), (2), (4)
Z punktu widzenia pragmatyki można badać zdania (1), (4).
Gramatyką będziemy nazywali czwórkę:
G = <V, , P, >, gdzie:
V - zbiór symboli terminalnych (alfabet końcowy), np.: cukier, chemia
- zbiór symboli nieterminalnych (alfabet pomocniczy), np.: zdanie, podmiot, orzeczenie
P - lista produkcji, zbiór uporządkowanych par (relacji) , - słowo V lub ,
- ciąg symboli V lub .
- wyróżniony symbol, zwany głową języka, aksjomatem, symbolem początkowym, konstrukcja o
najwyższym stopniu złożoności
Pojęcia:
Słownik (alfabet): A = V - skończony dowolny zbiór symboli
Język L(G) - zbiór zdań wszystkich słów poprawnych w sensie gramatyki G (wyprowadzalnych z za pomocą
P).
Zdanie - słowo, które składa się z symboli końcowych (elementów V) i które można wyprowadzić z głowy
gramatyki , stosując listę produkcji P,
Wywód słowa – ciąg wyprowadzeń u1 u2 W,
Drzewo rozbioru - graficzna ilustracja wywodu słowa,
Gramatyka – skończony zbiór reguł pozwalający odróżnić
w tym języku zdania poprawne
od
niepoprawnych..
Notacja Backusa Naura (BNF) - reguły zapisu:
1. stosowany dotąd znak produkcji zostaje zastąpiony znakiem „ ::=„, (znaczy: jest zdefiniowane jako),
2. symbole pomocnicze mają postać ciągów znaków zamkniętych w nawiasy kątowe, <sn> - symbol
nieterminalny,
3. wszystkie produkcje o tym samym poprzedniku piszemy w jednym wierszu, oddzielając je tylko od siebie
znakiem | znaczenie „lub”
4. symbole terminalne (przykłady) - +, 0, st;
Przykład gramatyki Gp = <V, , P, >
Vp = {fruwa, kanarek, słowik, śpiewa}
p = {<zdanie>, <podmiot>, <orzeczenie>}}
Pp = {<zdanie> ::= <podmiot><orzeczenie>
<podmiot> ::= kanarek | słowik
<orzeczenie> ::= fruwa | śpiewa }
p = <zdanie>
zdanie poprawne dla tak zdefiniowanej gramatyki to: kanarek śpiewa
zdanie niepoprawne w tej gramatyce to: fruwa słowik
Zadanie 1
Zdefiniować gramatykę generującą tekst
ak bm cn a...a b...b c...c
a) k, m,n > = 1
b) m > = 1, k = n > = 1
c) k = m = n > = 1
Zadanie 2
Zaprojektować gramatykę generującą liczby
a) całkowite:
Rozszerzona notacja Bacusa-Naura (EBNF)
Dodatkowe symbole metajęzykowe:
[ x ] zerokrotne lub jednokrotne powtórzenie x (opcjonalne)
{ x } zerokrotne lub wielokrotne powtórzenie x
Zmodyfikować listę produkcji, aby wykorzystywała symbole EBNF:
b) rzeczywiste z przecinkiem
Zadanie 3
Zbudować gramatykę generującą nazwy zmiennych. Nazwy mogą składać się z liter, cyfr i znaku podkreślenia.
Nazwa nie może zaczynać się ani cyfrą, ani podkreśleniem. Nazwa nie może kończyć się podkreśleniem.
Przykłady: J23; x_nast;
Zadanie 4
Dokonać rozbioru gramatycznego następującego słowa: ALFA_K2
Zadanie 5
Zaprojektować gramatykę G generującą słowa ze znaków {0,1} spełniające następujące warunki:
wartość słowa traktowanego jako liczba binarna jest parzysta i niepodzielna przez 4,
słowa są symetryczne względem środka.
Przykłady słów poprawnych
Przykłady słów niepoprawnych
010
111
0110
00100
01011010
1001
Zadanie 6
Zaprojektować gramatykę, generującą nagłówek funkcji w języku Pascal.
Uwagi:
1. Nazwa funkcji lub argumentu to ciąg liter i cyfr, rozpoczynający się literą.
2. Argumenty mogą być przekazywane zarówno przez wartość jak i przez zmienną.
3. Dozwolone typy danych, to: integer, boolean, char, real.
Przykłady wyrażeń w notacji ONP:
ab*c+
= a*b+c
ab+c*
= (a+b)*c
ANb*
= Na*b
ab+cd*
= (a+b)c*d
aNb*sinax*b+cos+ = sin(Na*b)+cos(a*x+b)
Zadanie 7
Zaprojektować gramatykę, generującą wyrażenia arytmetyczne w ONP
Reguły translacji wyrażeń na notację ONP przy użyciu stosu:
1. „(”
->stos
2. argument
-> wyjście
3. operator
-> stos (gdy ma wyższy priorytet od operatora na szczycie stosu)
-> stos i usuwa ze stosu (na wyjście) wszystkie operatory o wyższym lub równym
priorytecie
4. „)”
-> wyprowadzenie stosu aż do „)”
Zadanie 8
Dokonać translacji z notacji nawiasowej na notacje ONP (przy użyciu stosu)
sin (a * x + b)
sin (a * x) +b
sin (a) * x + b
a * b + (c * a ^ b)/(b * c ^ a)
(sin a * (x + y))/ (a * cos (Nb - x)-sin(x + b*y) + c)
Zadania dodatkowe
Zadanie 1
Zaprojektować gramatykę, generującą ciągi ‘*’ i ‘’. Przy czym liczba * ma być parzysta, a liczba nieparzysta.
Zadanie 2
Zbudować gramatykę, generującą zapisy wielomianu w schemacie Hornera. (liczba jest niezerową liczbą
naturalną, zaś zmienna jest jednoliterowa)
(poprawne) przykłady:
23 lub x lub x + 13 lub ( x – 7) * x + 17 lub ( ( z + 3) * z – 12) * z + 22