You are on page 1of 8

Seminar 1

1
1.1

Introducere
Vocabulare

Mecanisme de specicare a limbajelor de generare (gramaticile formale) de acceptare (automate) Denitie 1. Fie V o multime nita, nevida (V = ) se numeste alfabet sau vocabular. Un element x V se numeste simbol sau caracter. Denim urmatoarele multimi asociate: V i = V V V ... V (de i ori) - produs cartezian contine toate cuvintele de lungime i care se pot forma cu elementele lui V . V = V i (de i ori) - vocabular universal contine toate cuvintele care se pot forma i=0 cu elementele lui V . V+ = Vi i=1 Observam ca V = V + , unde este secventa vida (fara nici un simbol). w = x1 x2 ...xn , xi V, i = 1, n se numeste secventa sau cuvant pe V. |w| reprezinta lungimea secventei w, || = 0. Denitie 2. Pe V se deneste operatia de concatenare: x = x1 x2 ...xn V , y = y1 y2 ...ym V xy = x1 ...xn y1 ...ym Aceasta operatie are urmatoarele proprietati: NU este comutativa: xy = yx este asociativa: (xy)z = x(yz) este element neutru: x = x = x.

1.2

Gramatici formale

Denitie 3. Un sistem format din urmatoarele componente: G = (N, , P, S) se numeste gramatica, unde N - multimea neterminalelor (se noteaza cu litere mari) - multimea terminalelor (se noteaza cu litere mici, cifre, etc) N = , N = V P - multimea regulilor de productie, unde o regula de productie este o pereche de 2 elemente (, ) cu , (N ) si contine cel putin un neterminal. Perechea (, ) se mai noteaza si si se citeste produce . S este simbolul initial al gramaticii, S N (este un neterminal).

1.3

Relatia de derivare
= A , = , si (A ) P

Denitie 4. Spunem ca deriva pe , si scriem daca:

Denim urmatoarele relatii: - inchiderea tranzitiva a relatiei :


+

= 1 2 ... n = , 1 = 2 = ... = n
+

- inchiderea reexiva si tranzitiva a relatiei :

= 1 2 ... n = .
+

E posibil ca 1 = 2 , de exemplu. - derivarea in i pasi:


(i)

= 1 2 ... i = , 1 = 2 = ... = n
(i)

Denitie 5. Numim limbajul generat de o gramatica G { } L(G) = w | S w


G

Probleme
1. Fie gramatica G = ({E, T, F }; {a, +, , (, )}; P ; E), unde multimea productiilor P este: 1) E T 2) E E + T 3) T T F 4) T F 5) F (E) 6) F a a) Scrieti o derivare la stanga pentru secventa w = (a + a) a. b) Scrieti o derivare la dreapta pentru secventa w = (a + a) a. c) Scrieti arborele generator corespunzator secventei w. Denitie 6. O derivare la stanga(dreapta) este acea derivare in care la ecare pas deriva cel mai din stanga(dreapta) neterminal. Solutie: a) E T T F F F (E) F (E + T ) F (T + T ) F (F + T ) F (a + T ) F (a + F ) F (a + a) F (a + a) a
4 6 6 1 3 4 5 2 1 4 6

b) E T T F T a F a (E) a (E + T ) a (E + F ) a (E + a) a (T + a) a (F + a) a (a + a) a
1 4 6 1 3 6 4 5 2 4 6

c) Desen arbore

2. Construiti gramatici formale care sa genereze limbajele: L1 = {an bn | n N} L2 = {an bm | n, m N} L3 = {an bm | n, m N, n m} L4 = {a2n bn | n N } L5 = {ai bj ci+j | i, j N} L6 = {ai bj ci+j | n N } Rezolvari: P1 : 1) S aSb 3

2) S P2 : 1) S aS 2) S Sb 3) S P3 : 1) S aSb 2) S Sb 3) S P4 : 1) S a2 Sb 2) S a2 b P5 : 1) 2) 3) 4) P6 : 1) 2) 3) 4) S aSc S bAc A bAc A bc S aSc SA A bAc A

3. Pentru limbajele urmatoare gasiti gramaticile care le genereaza . L7 = {w {a, b} | na (w). .3} unde na (w) este numarul aparitiilor lui a in w. L8 = {w {0, 1} | w = reprezentarea binara a unui numar natural par} L9 = {w {0, 1} | w = reprezentarea binara a unui numar natural impar} L10 = {ww| w {a, b} } unde w = xn xn1 ...x2 x1 este inversul lui w = x1 x2 ...xn . L10 = {ww| w {a, b}+ } L11 = { | {0, 1} , {c, d}+ } Rezolvari: P7 : 4

1) S SaSaSaS 2) S bS 3) S P8 : 1) 2) 3) 4) 5) P9 : 1) 2) 3) 4) 5) S 1A1 A 1A A 0A A S1 S 1A0 A 1A A 0A A S0

P1 0 : 1) S aSa 2) S bSb 3) S P1 0 : 1) 2) 3) 4) 1) 2) 3) 4) 5) 6) 7) S S S S aSa bSb aa bb

P1 1 : S 0S0 S 1S1 SA A cA A dA Ac Ad

Ierarhia lui Chomsky

- Gramatici de tip 0 (nu exista restrictii asupra productiilor) - Automatul generat: Masina Turing. - Gramatici de tip 1 (dependente de context) au productii de forma: cu || || Automatul generat: Automatul liniar marginit - Gramatici detip 2 (independente de context) au productii de forma A , A N, (N ) Automatul generat: Automatul pushdown(cu memorie) - Gramatici de tip 3 (regulate sau liniare la dreapta) cu productii de forma A xB, A x, A, B N, x Automatul generat: Automatul nit Vom nota cu Li familia tuturor limbajelor de tip i. Atunci avem L0 L 1 L2 L3 Fie . L = {w {a, b} | na (w). .3}

Sa gasim G o gramatica de tip 3 astfel incat L(G) = L. Multimea productiilor P este: 1) S bS 2) S aA 3) A bA 4) A aB 5) B bB 6) B aC 7) C bC 8) C S 9) S Teorem 1. Gramaticile dependente de context sunt recursive (exista un algoritm care decide a daca o secventa data apartine limbajului generat de gramatica). 6

Algoritmul REC

Input: G = (N, , P, S) gramatica de tip 1 w = x1 x2 ...xm , |w| = m N Output: Da - daca w L(G) Nu - daca w L(G) Algoritm: P1: Daca m > 0 atunci mergem la pasul P 3 P2: Daca (S ) P P2.1 atunci aseaza Da si STOP P2.2 altfel aseaza Nu si STOP P3: T0 {S} P4: i 0 P5: Ti+1 Ti { (N ) | Ti a. i. , || m} P6: Daca Ti+1 = Ti atunci P6.1 i i + 1 P6.2 ne intoarcem la P 5 P7: Daca w Ti P7.1 atunci aseaza Da P7.2 altfel aseaza Nu P8: STOP. Exemplu: Consideram gramatica G = ({S, A, B, C}, {a, b, c}, P, S) cu productiile P : 1. S AB 2. B aB 3. B CB 4. Aa bC 5. Aa CcB 6. CB Ac 7

7. CB bAc 8. bA bc 9. bA AAB Utilizand algoritmul REC sa se verice apartenenta secventei w = bac la limbajul generat de gramatica de mai sus. Rezolvare: Observam ca m = 3. T0 = {S}, i = 0, S AB
1

T1 = T0 {AB}, i = 1, AB AaB, sau AB ACB


2 3

T2 = T1 {AaB, ACB}, i = 2, AaB bCB, sau ACB AAc


1 6

T3 = T2 {bCB, AAc}, i = 3, bCB bAc, si AAc


6

T4 = T3 {bAc}, i = 4, bAc bac


8

T5 = T4 {bac}, i = 5 T6 = T5 Observam ca w = bac T6 , deci raspunsul este da, w L(G).

Implementare

Codicarea unei gramatici in limbajul C: char N[10]; // nonterminale char T[10]; // terminale typedef struct productie{ char left; char right[20]; }productie; productie P[20]; char S; // S trebuie sa se gaseasca in N.

You might also like