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+cd*
= (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

Podobne dokumenty