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