Sunteți pe pagina 1din 56

Limbaje Formale, Automate si Compilatoare

Curs 1
2014-15

LFAC (2014-15)

Curs 1

1 / 37

Structura cursului
1

Prezentare curs

Limbaje formale

Mecanisme de generare a limbajelor: gramatici

Ierarhia lui Chomsky

Limbaje si gramatici de tip 3 (regulate)

i de nchidere pentru familia de limbaje regulate


Proprietat

LFAC (2014-15)

Curs 1

2 / 37

Prezentare curs

Structura cursului
1

Prezentare curs

Limbaje formale

Mecanisme de generare a limbajelor: gramatici

Ierarhia lui Chomsky

Limbaje si gramatici de tip 3 (regulate)

i de nchidere pentru familia de limbaje regulate


Proprietat

LFAC (2014-15)

Curs 1

3 / 37

Prezentare curs

Limbaje Formale, Automate si Compilatoare


Titulari curs:
O. Captarencu: otto@info.uaic.iasi.ro
http://www.infoiasi.ro/otto/lfac.html
A. Moruz:mmoruz@info.uaic.ro
Titulari seminar/laborator:
O. Captarencu
A. Moruz
B. Prelipcean

C. Varlan

LFAC (2014-15)

Curs 1

4 / 37

Prezentare curs

Sistem evaluare
7 seminarii, 6 laboratoare;
AS = activitatea la seminar (max 10 puncte);
AL = activitatea la laborator (max 10 puncte);
am
anile

T1,T2 teste scrise n sapt


8, respectiv n sesiune;
Punctajul final se obtine astfel:
P = 3 * AS + 3 * AL + 2 * T1 + 2 * T2
Conditii miminale de promovare: AS 5, AL 5;
Punctaj minim pentru promovare: P 50;
Nota finala se va stabili conform criteriilor ECTS;
LFAC (2014-15)

Curs 1

5 / 37

Prezentare curs

Sistem evaluare
AS = activitatea la seminar (max 10 puncte):
media a doua teste scrise
a la 2 puncte bonus pentru activitatea din timpul seminarului
pan

AL = activitatea la laborator (max 10 puncte):


1 test laborator, 2 teme laborator (note de la 0 la 10)
AL = media celor 3 note

LFAC (2014-15)

Curs 1

6 / 37

Prezentare curs

Tematica cursului (partea I)


Limbaje si gramatici
Limbaje regulate; gramatici, automate , expresii regulate
Limbaje independente de context; gramatici, automate pushdown
Masini Turing

LFAC (2014-15)

Curs 1

7 / 37

Prezentare curs

Tematica cursului (partea II)


Limbaje de programare: proiectare si implementare
Analiza lexicala
Analiza sintactica
Traducere n cod intermediar

LFAC (2014-15)

Curs 1

8 / 37

Prezentare curs

Tematica seminarului
Exemple de limbaje si gramatici
Automate finite deterministe, nedeterministe, cu epsilon-tranzitii Exemple
Expresii regulate
Gramatici independente de context, arbori de derivare, eliminarea
simbolurilor inutile, eliminarea regulilor de stergere, a
redenumirilor
Forma normala Chomsky, algoritmul CYK
Automate pushdown - exemple

LFAC (2014-15)

Curs 1

9 / 37

Prezentare curs

Tematica laboratorului
Analiza lexicala folosind instrumente de tip LEX
Analiza sintactica folosind instrumente de tip YACC
Interpretor construit cu LEX si YACC

LFAC (2014-15)

Curs 1

10 / 37

Prezentare curs

Bibliografie (selectii)
1

A. V. Aho, M. S. Lam, R. Sethi, J. D. Ullman: Compilers:


Principles, Techniques, and Tools. Boston: Addison-Wesley, 2007

Gh. Grigoras. Constructia compilatoarelor - Algoritmi


fundamentali, Ed. Universitatii Al. I. Cuza Iasi, ISBN
973-703-084-2, 274 pg., 2005

Hopcroft, John E.; Motwani, Rajeev; Ullman, Jeffrey D. (2006).


Introduction to Automata Theory, Languages, and Computation
(3rd ed.). Addison-Wesley

J. Toader - Limbaje formale si automate, Editura Matrix Rom,


Bucuresti, 1999.

J. Toader, S. Andrei - Limbaje formale si teoria automatelor. Teorie


Editura Universitatii Al. I. Cuza, Iasi, 2002.
si practica,
LFAC (2014-15)

Curs 1

11 / 37

Limbaje formale

Structura cursului
1

Prezentare curs

Limbaje formale

Mecanisme de generare a limbajelor: gramatici

Ierarhia lui Chomsky

Limbaje si gramatici de tip 3 (regulate)

i de nchidere pentru familia de limbaje regulate


Proprietat

LFAC (2014-15)

Curs 1

12 / 37

Limbaje formale

Alfabet, cuvant,
multtime de cuvinte
Alfabet: V o multime finita (elementele lui V = simboluri )

LFAC (2014-15)

Curs 1

13 / 37

Limbaje formale

Alfabet, cuvant,
multtime de cuvinte
Alfabet: V o multime finita (elementele lui V = simboluri )

Cuvant:
sir finit de simboluri

cuvantul
nul este notat cu sau .

LFAC (2014-15)

Curs 1

13 / 37

Limbaje formale

Alfabet, cuvant,
multtime de cuvinte
Alfabet: V o multime finita (elementele lui V = simboluri )

Cuvant:
sir finit de simboluri

cuvantul
nul este notat cu sau .

u: numarul simbolurilor sale. Notatie: |u|.


Lungimea unui cuvant
|| = 0

LFAC (2014-15)

Curs 1

13 / 37

Limbaje formale

Alfabet, cuvant,
multtime de cuvinte
Alfabet: V o multime finita (elementele lui V = simboluri )

Cuvant:
sir finit de simboluri

cuvantul
nul este notat cu sau .

u: numarul simbolurilor sale. Notatie: |u|.


Lungimea unui cuvant
|| = 0
V - multimea tuturor cuvintelor peste alfabetul V, inclusiv .
{0, 1} = {, 0, 1, 00, 01, 10, 11, 000, 001, . . .}

LFAC (2014-15)

Curs 1

13 / 37

Limbaje formale

Alfabet, cuvant,
multtime de cuvinte
Alfabet: V o multime finita (elementele lui V = simboluri )

Cuvant:
sir finit de simboluri

cuvantul
nul este notat cu sau .

u: numarul simbolurilor sale. Notatie: |u|.


Lungimea unui cuvant
|| = 0
V - multimea tuturor cuvintelor peste alfabetul V, inclusiv .
{0, 1} = {, 0, 1, 00, 01, 10, 11, 000, 001, . . .}
V + - multimea tuturor cuvintelor nenule peste alfabetul V
{0, 1}+ = {0, 1, 00, 01, 10, 11, 000, 001, . . .}

LFAC (2014-15)

Curs 1

13 / 37

Limbaje formale

Operatii pe cuvinte

Concatenarea a doua cuvinte x, y: cuvantul


x y obtinut din
simbolurile lui x, n ordinea n care apar, urmate de cele ale lui y
de asemenea n ordinea n care apar:
x = 0100, y = 100, x y = 0100100
x = 000, y = , x y = 000

LFAC (2014-15)

Curs 1

14 / 37

Limbaje formale

Operatii pe cuvinte

Concatenarea a doua cuvinte x, y: cuvantul


x y obtinut din
simbolurile lui x, n ordinea n care apar, urmate de cele ale lui y
de asemenea n ordinea n care apar:
x = 0100, y = 100, x y = 0100100
x = 000, y = , x y = 000
Concatenarea este asociativa

LFAC (2014-15)

Curs 1

14 / 37

Limbaje formale

Operatii pe cuvinte

Concatenarea a doua cuvinte x, y: cuvantul


x y obtinut din
simbolurile lui x, n ordinea n care apar, urmate de cele ale lui y
de asemenea n ordinea n care apar:
x = 0100, y = 100, x y = 0100100
x = 000, y = , x y = 000
Concatenarea este asociativa
(V , ) este monoid ( este element neutru), se numeste monoidul
liber generat de V .

LFAC (2014-15)

Curs 1

14 / 37

Limbaje formale

Operatii pe cuvinte

Concatenarea a doua cuvinte x, y: cuvantul


x y obtinut din
simbolurile lui x, n ordinea n care apar, urmate de cele ale lui y
de asemenea n ordinea n care apar:
x = 0100, y = 100, x y = 0100100
x = 000, y = , x y = 000
Concatenarea este asociativa
(V , ) este monoid ( este element neutru), se numeste monoidul
liber generat de V .

Cuvantul
v este un prefix al cuvantului
u daca w V : u = vw;
daca w V + , atunci v este un prefix propriu al lui u.

LFAC (2014-15)

Curs 1

14 / 37

Limbaje formale

Operatii pe cuvinte

Concatenarea a doua cuvinte x, y: cuvantul


x y obtinut din
simbolurile lui x, n ordinea n care apar, urmate de cele ale lui y
de asemenea n ordinea n care apar:
x = 0100, y = 100, x y = 0100100
x = 000, y = , x y = 000
Concatenarea este asociativa
(V , ) este monoid ( este element neutru), se numeste monoidul
liber generat de V .

Cuvantul
v este un prefix al cuvantului
u daca w V : u = vw;
daca w V + , atunci v este un prefix propriu al lui u.

Cuvantul
v este un sufix al cuvantului
u daca w V : u = wv ;
daca w V + , atunci v este un sufix propriu al lui u.
LFAC (2014-15)

Curs 1

14 / 37

Limbaje formale

Fie V un alfabet. O submultime L V este un limbaj (formal)


peste alfabetul V (sau V-limbaj) daca L are o descriere
finita.

(matematica)
O descriere poate fi:

LFAC (2014-15)

Curs 1

15 / 37

Limbaje formale

Fie V un alfabet. O submultime L V este un limbaj (formal)


peste alfabetul V (sau V-limbaj) daca L are o descriere
finita.

(matematica)
O descriere poate fi:
neformala (n limbaj natural):
multimea cuvintelor peste alfabetul {0, 1} care contin un numar par
de 0.
L = {x V + : |x| este par }.
{an bn |n N}.
{w {0, 1} |w se termina in 00}.

LFAC (2014-15)

Curs 1

15 / 37

Limbaje formale

Fie V un alfabet. O submultime L V este un limbaj (formal)


peste alfabetul V (sau V-limbaj) daca L are o descriere
finita.

(matematica)
O descriere poate fi:
neformala (n limbaj natural):
multimea cuvintelor peste alfabetul {0, 1} care contin un numar par
de 0.
L = {x V + : |x| este par }.
{an bn |n N}.
{w {0, 1} |w se termina in 00}.

formala (descriere matematica):


o descriere inductiva a cuvintelor

o descriere generativa a cuvintelor (gramatica generativa)


o descriere a unei metode de recunoastere a cuvintelor din limbaj
(automat finit, automat pushdown, etc.)
LFAC (2014-15)

Curs 1

15 / 37

Limbaje formale

Operatii cu limbaje
Operatiile cu multimi (reuniune, intersectie etc)
Produs de limbaje: L1 L2 = {u v |u L1 , v L2 }
S
Iteratia (produsul Kleene): L = n0 Ln , unde:
L0 = {}
Ln+1 = Ln L

LR = {w R |w L}; daca w = a1 a2 . . . an , atunci w R = an . . . a2 a1

LFAC (2014-15)

Curs 1

16 / 37

Mecanisme de generare a limbajelor: gramatici

Structura cursului
1

Prezentare curs

Limbaje formale

Mecanisme de generare a limbajelor: gramatici

Ierarhia lui Chomsky

Limbaje si gramatici de tip 3 (regulate)

i de nchidere pentru familia de limbaje regulate


Proprietat

LFAC (2014-15)

Curs 1

17 / 37

Mecanisme de generare a limbajelor: gramatici

Gramatici
Definitie 1
O gramatica este un sistem G = (N, T , S, P), unde:
N si T sunt doua alfabete disjuncte:
N este multimea neterminalilor
T este multimea terminalilor

S N este simbolul de start (neterminalul initial)


P este o multime finita de reguli (productii) de forma x y, unde
x, y (N T ) si x contine cel putin un neterminal.

LFAC (2014-15)

Curs 1

18 / 37

Mecanisme de generare a limbajelor: gramatici

Derivare
Definitie 2
Fie G = (N, T , S, P) o gramatica si u, v (N T ) .
Spunem ca v este derivat direct (ntr-un pas) de la u prin aplicarea
u v , daca p, q (N T ) astfel ncat

regulii x y, si notam
u = pxq si v = pyq.

LFAC (2014-15)

Curs 1

19 / 37

Mecanisme de generare a limbajelor: gramatici

Derivare
Definitie 2
Fie G = (N, T , S, P) o gramatica si u, v (N T ) .
Spunem ca v este derivat direct (ntr-un pas) de la u prin aplicarea
u v , daca p, q (N T ) astfel ncat

regulii x y, si notam
u = pxq si v = pyq.
Daca u1 u2 . . . un , n > 1, spunem ca un este derivat din u1 n
G si notam u1 + un .

LFAC (2014-15)

Curs 1

19 / 37

Mecanisme de generare a limbajelor: gramatici

Derivare
Definitie 2
Fie G = (N, T , S, P) o gramatica si u, v (N T ) .
Spunem ca v este derivat direct (ntr-un pas) de la u prin aplicarea
u v , daca p, q (N T ) astfel ncat

regulii x y, si notam
u = pxq si v = pyq.
Daca u1 u2 . . . un , n > 1, spunem ca un este derivat din u1 n
G si notam u1 + un .
Scriem u v daca u + v sau u = v .

LFAC (2014-15)

Curs 1

19 / 37

Mecanisme de generare a limbajelor: gramatici

Limbaj generat
Definitie 3
Limbajul generat de gramatica G este:
L(G) = {w T |S + w}

LFAC (2014-15)

Curs 1

20 / 37

Mecanisme de generare a limbajelor: gramatici

Limbaj generat
Definitie 3
Limbajul generat de gramatica G este:
L(G) = {w T |S + w}
Definitie 4
Doua gramatici G1 si G2 sunt echivalente daca L(G1 ) = L(G2 ).

LFAC (2014-15)

Curs 1

20 / 37

Mecanisme de generare a limbajelor: gramatici

Exemplu
L = {an bn |n 1}

Definitia inductiva:
ab L
Daca X L, atunci aXb L
nu face parte din L
Nici un alt cuvant

LFAC (2014-15)

Curs 1

21 / 37

Mecanisme de generare a limbajelor: gramatici

Exemplu
L = {an bn |n 1}

Definitia inductiva:
ab L
Daca X L, atunci aXb L
nu face parte din L
Nici un alt cuvant

Definitia generativa:
G = ({X }, {a, b}, X , P), unde P = {X aXb, X ab}

Derivarea cuvantului
a3 b 3 :
X aXb aaXbb aaabbb

LFAC (2014-15)

Curs 1

21 / 37

Mecanisme de generare a limbajelor: gramatici

Exemplu
L = {an bn c n |n 1}
= (N, T , S, P), N = {S, X }, T = {a, b, c}, P consta din:
1

S abc

S aSXc

cX Xc

bX bb

Derivarea cuvantului
a3 b 3 c 3 :
S (2) aSXc (2) aaSXcXc (1) aaabcX cXc (3)
aaabX ccXc (4) aaabbccX c (3) aaabbcX cc (3)
aaabbX ccc (4) aaabbbccc = a3 b3 c 3

LFAC (2014-15)

Curs 1

22 / 37

Ierarhia lui Chomsky

Structura cursului
1

Prezentare curs

Limbaje formale

Mecanisme de generare a limbajelor: gramatici

Ierarhia lui Chomsky

Limbaje si gramatici de tip 3 (regulate)

i de nchidere pentru familia de limbaje regulate


Proprietat

LFAC (2014-15)

Curs 1

23 / 37

Ierarhia lui Chomsky

Ierarhia lui Chomsky


1

Gramatici de tip 0 (generale)


Nu exista restrictii asupra regulilor

LFAC (2014-15)

Curs 1

24 / 37

Ierarhia lui Chomsky

Ierarhia lui Chomsky


1

Gramatici de tip 0 (generale)


Nu exista restrictii asupra regulilor

Gramatici de tip 1 (dependente de context)


reguli de forma pxq pyq unde x N, y 6= , p, q (N T ) ,
S , caz n care S nu apare n dreapta productiilor

LFAC (2014-15)

Curs 1

24 / 37

Ierarhia lui Chomsky

Ierarhia lui Chomsky


1

Gramatici de tip 0 (generale)


Nu exista restrictii asupra regulilor

Gramatici de tip 1 (dependente de context)


reguli de forma pxq pyq unde x N, y 6= , p, q (N T ) ,
S , caz n care S nu apare n dreapta productiilor

Gramatici de tip 2 (independente de context)


reguli de forma A y unde A N si y (N T )

LFAC (2014-15)

Curs 1

24 / 37

Ierarhia lui Chomsky

Ierarhia lui Chomsky


1

Gramatici de tip 0 (generale)


Nu exista restrictii asupra regulilor

Gramatici de tip 1 (dependente de context)


reguli de forma pxq pyq unde x N, y 6= , p, q (N T ) ,
S , caz n care S nu apare n dreapta productiilor

Gramatici de tip 2 (independente de context)


reguli de forma A y unde A N si y (N T )

Gramatici de tip 3 (regulate)


reguli A u sau A uB unde A, B N si u T .

LFAC (2014-15)

Curs 1

24 / 37

Ierarhia lui Chomsky

Exemple
Ce tip au urmatoarele gramatici?
G = (N, T , S, P), N = {S, A, B}, T = {a, b, c}, P:
(1)S aaAc
(2)aAc aAbBc
(3)bB bBc
(4)Bc Abc
(5)A a
G = (N, T , S, P), N = {S, X }, T = {a, b, c}, P:
(1)S abc
(2)S aSXc
(3)cX Xc
(4)bX bb
LFAC (2014-15)

Curs 1

25 / 37

Ierarhia lui Chomsky

Exemple
Fie
G = ({E}, {a, +, , (, )}, E, {E a, E (E + E), E (E E)}).
Ce tip are gramatica G ?
Construiti derivari din E pentru cuvintele (a + a) si ((a + a) aa)
Cuvantul (a + a a) poate fi derivat din E?
Descrieti limbajul L(G)

Fie G = ({A, B}, {a, b}, A, {A aA, A B, B bB, B })


Ce tip are gramatica G ?
Descrieti limbajul L(G)

LFAC (2014-15)

Curs 1

26 / 37

Ierarhia lui Chomsky

Clasificarea limbajelor
Un limbaj L este de tipul j daca exista o gramatica G de tipul j
astfel incat L(G) = L, unde j {0, 1, 2, 3}.
Vom nota cu Lj clasa limbajelor de tipul j, unde j {0, 1, 2, 3}.
Din ierarhia lui Chomsky: L3 L2 L1 L0
Incluziunile sunt stricte:
orice limbaj de tip j + 1 este si de tip j {0, 1, 2}
exista limbaje de tip j care nu sunt de tip j + 1, j {0, 1, 2}

LFAC (2014-15)

Curs 1

27 / 37

Ierarhia lui Chomsky

i
Proprietat
Fiecare din familiile Lj cu 0 j 3 contine toate limbajele finite
Fiecare din familiile Lj cu 0 j 3 este inchisa la operatia de
reuniune:
L1 , L2 Lj = L1 L2 Lj ,
j : 0 j 3

LFAC (2014-15)

Curs 1

28 / 37

Limbaje si gramatici de tip 3 (regulate)

Structura cursului
1

Prezentare curs

Limbaje formale

Mecanisme de generare a limbajelor: gramatici

Ierarhia lui Chomsky

Limbaje si gramatici de tip 3 (regulate)

i de nchidere pentru familia de limbaje regulate


Proprietat

LFAC (2014-15)

Curs 1

29 / 37

Limbaje si gramatici de tip 3 (regulate)

Gramatici de tip 3
O gramatica G = (N, T , S, P) este de tip 3 daca regulile sale au
forma: A u sau A uB unde A, B N si u T .
Exemplu: G = ({D}, {0, 1, ..., 9}, D, P)
Unde P este:
D 0D|1D|2D| . . . |9D
D 0|1| . . . |9

LFAC (2014-15)

Curs 1

30 / 37

Limbaje si gramatici de tip 3 (regulate)

Exemple
Fie gramatica G = ({A, B}, {l, d}, A, P) unde P este:
A lB, B lB|dB| (l = litera, d = cifra)

LFAC (2014-15)

Curs 1

31 / 37

Limbaje si gramatici de tip 3 (regulate)

Exemple
Fie gramatica G = ({A, B}, {l, d}, A, P) unde P este:
A lB, B lB|dB| (l = litera, d = cifra)
L(G): multimea identificatorilor
Fie gramatica G = ({A, B}, {+, , d}, A, P) unde P este:
A +dB| dB|dB, B dB| (d = cifra)

LFAC (2014-15)

Curs 1

31 / 37

Limbaje si gramatici de tip 3 (regulate)

Exemple
Fie gramatica G = ({A, B}, {l, d}, A, P) unde P este:
A lB, B lB|dB| (l = litera, d = cifra)
L(G): multimea identificatorilor
Fie gramatica G = ({A, B}, {+, , d}, A, P) unde P este:
A +dB| dB|dB, B dB| (d = cifra)
L(G): multimea constantelor intregi

LFAC (2014-15)

Curs 1

31 / 37

Limbaje si gramatici de tip 3 (regulate)

Forma normala

O gramatica de tip 3 este in forma normala daca regulile sale sunt


de forma A a sau A aB, unde a T , si, eventual S ( caz
in care S nu apare in dreapta regulilor).

Pentru orice gramatica de tip 3 exista o gramatica echivalenta in


forma normala.

LFAC (2014-15)

Curs 1

32 / 37

Limbaje si gramatici de tip 3 (regulate)

Forma normala
Obtinerea gramaticii in forma normala echivalenta cu o gramatica
de tip 3:
Se poate arata ca pot fi eliminate regulile de forma A B
(redenumiri) si cele de forma A (reguli de stergere), cu
exceptia, eventual a regulii S .
Orice regula de forma A a1 a2 . . . an se inlocuieste cu
A a1 B1 , B1 a2 B2 , . . ., Bn2 an1 Bn1 , Bn1 an , n > 1,
B1 , . . . , Bn1 fiind neterminali noi.
Orice regula de forma A a1 a2 . . . an B se inlocuieste cu A a1 B1 ,
B1 a2 B2 , . . ., Bn2 an1 Bn1 , Bn1 an B, n > 1, B1 , . . . , Bn1
fiind neterminali noi
Transformarile care se fac nu modifica limbajul generat de
gramatica
LFAC (2014-15)

Curs 1

33 / 37

i de nchidere pentru familia de limbaje regulate


Proprietat

Structura cursului
1

Prezentare curs

Limbaje formale

Mecanisme de generare a limbajelor: gramatici

Ierarhia lui Chomsky

Limbaje si gramatici de tip 3 (regulate)

i de nchidere pentru familia de limbaje regulate


Proprietat

LFAC (2014-15)

Curs 1

34 / 37

i de nchidere pentru familia de limbaje regulate


Proprietat

Fie L, L1 , L2 limbaje de tip 3 (regulate).


Atunci, urmatoarele limbaje sunt de asemenea de tip 3:
L1 L2
L1 L2
L
LR
L1 L2
L1 \ L2

LFAC (2014-15)

Curs 1

35 / 37

i de nchidere pentru familia de limbaje regulate


Proprietat

Inchiderea la reununiune
Fie L, L1 , L2 limbaje de tip 3 (regulate).
Fie G1 = (N1 , T1 , S1 , P1 ) si G2 = (N2 , T2 , S2 , P2 ) gramatici de tip 3 cu
L1 = L(G1 ), L2 = L(G2 ).
Presupunem N1 N2 = si gramaticile in forma normala.

Inchiderea la reuniune: se arata ca L1 L2 L3 :


Gramatica G = (N1 N2 {S}, T1 T2 , S, P1 P2 {S S1 , S S2 })
este de tip 3 si genereaza limbajul L1 L2

LFAC (2014-15)

Curs 1

36 / 37

i de nchidere pentru familia de limbaje regulate


Proprietat

Inchiderea la operatia de produs


Fie L1 , L2 limbaje de tip 3 (regulate).
Fie G1 = (N1 , T1 , S1 , P1 ) si G2 = (N2 , T2 , S2 , P2 ) gramatici de tip 3 cu
L1 = L(G1 ), L2 = L(G2 ).
Presupunem N1 N2 = si gramaticile in forma normala.
Gramatica G = (N1 N2 , T1 T2 , S1 , P) unde P consta din:
regulile de forma A aB din P1
reguli A aS2 pentru orice regula de forma A a din P1
toate regulile din P2
este de tip 3 si genereaza limbajul L1 L2 .

LFAC (2014-15)

Curs 1

37 / 37