Sunteți pe pagina 1din 25

Limbaje Formale, Automate i

Compilatoare
Curs: G. Grigora, grigoras@info.uaic.ro
Seminar, Laborator:
Oana Prisecaru, otto@info.uaic.ro
Ionel Ancua, ancuta.ionel@info.uaic.ro
Tematica cursului
Limbaje i gramatici
Gramatici i limbaje regulate
Gramatici i limbaje independente de context
Limbaje de programare: proiectare i
implementare
Analiza lexical
Analiza sintactic
Traducere n cod intermediar
2 G. Grigoras, LFAC
Tematica seminar
Exemple de limbaje i gramatici
Automate finite deterministe, nedeterministe, cu
epsilon-tranziii - Exemple
Expresii regulate Exemple cu referire la unitile
lexicale din limbajele de programare
Gramatici independente de context, arbori de
derivare, eliminarea simbolurilor inutile,
eliminarea regulilor de tergere, a redenumirilor
Forma normal Chomsky, recunoaterea -
algoritmul CYK
Automate pushdown - exemple
3 G. Grigoras, LFAC
Tematica laborator
Analiza lexical
Analizor lexical manual
Analizor obinut cu un instrument de tip LEX
Analiza sintactic folosind instrumente de tip
YACC
Interpreter construit cu LEX i YACC
4 G. Grigoras, LFAC
Bibliografie
Grigoras, Gh. Constructia compilatoarelor - Algoritmi
fundamentali, Ed. Universitatii Al. I. "Cuza Iasi", ISBN 973-703-
084-2, 274 pg., 2005
Jucan Toader - Limbaje formale i automate, Editura Matrix
Rom, Bucureti, 1999, 162 p.
Jucan Toader, tefan Andrei Limbaje formale i teoria
automatelor. Teorie i practic, Editura Universitii Al. I.
Cuza, Iai, 2002, 327p.
Stoughton Alley, Formal Language Theory, Kansas State
University, Draft of Fall 2007.
Yehezkael R.B., Course notes on Formal Languages and
Compilers, Jerusalem College of Technology, December 2004.
Manual LEX, Manual FLEX, Manual YACC, Manual Bison,
Compiler Construction using Flex and Bison
5 G. Grigoras, LFAC
Curs 1 - plan
Alfabet, cuvnt, mulime de cuvinte
Limbaj (formal)
Non limbaj
Gramatici
Definiie
Derivare, limbaj generat
Exemple
Tipurile de gramatici, ierarhia lui Chomsky
Gramatici i limbaje de tip 3
Definiie, exemple, proprieti
6 G. Grigoras, LFAC
Alfabet, cuvnt, mulime de cuvinte
Alfabet: V o mulime finit, elementele simboluri
Simbolurile le vom nota a, b, etc.
Cuvnt: ir finit de simboluri
Cuvintele le vom nota u, v, w, x, z, y
V* - mulimea tuturor cuvintelor, inclusiv cuvntul
nul notat (epsilon) sau (lambda)
{0,1}* = {, 0, 1, 00, 01, 10, 11, 000, 001,... }
V
+
- mulimea tuturor cuvintelor nenule
{0,1}
+
= {0, 1, 00, 01, 10, 11, 000, 001,... }
Lungimea unui cuvnt u: numrul simbolurilor sale.
Notaie: | u |
| 0 | = 1, | 010 | = 3, | | = 0
7 G. Grigoras, LFAC
Alfabet, cuvnt, mulime de cuvinte
Concatenarea a dou cuvinte x, y: cuvntul xy obinut 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, xy = 0100100
x = 000, y = , xy = 000
Concatenarea este asociativ
este element neutru
(V*, ) este monoid, se numete monoidul liber generat de V
n continuare xy se va nota xy
Cuvntul v este un prefix al cuvntului u dac -w e V*, u =
vw; dac w e V
+
atunci v este un prefix propriu
Cuvntul v este un sufix al cuvntului u dac - w e V*, u = wv;
dac w e V
+
atunci v este un sufix propriu
8 G. Grigoras, LFAC
Limbaj (formal)
Fie V un alfabet. O submulime L _ V* este un limbaj
(formal) peste alfabetul V (sau V-limbaj) dac L are o
descriere finit.
O descriere poate fi:
neformal (n limbaj natural):
mulimea cuvintelor peste alfabetul {0,1} care conin un numr par
de 0 i un numr par de 1.
L = {x e V* : |x| este par}.
{ 0
n
1
n
| n e N}.
{w e {0, 1}* | w este palindrom }.
formal (descriere matematic):
o descriere inductiv a cuvintelor
o descriere generativ a cuvintelor (gramatic generativ)
o descriere a unei metode de recunoatere a cuvintelor din limbaj
(automat finit, automat pushdown, etc.)
9 G. Grigoras, LFAC
Non - limbaj
Exist submulimi de cuvinte din V* care nu
sunt limbaje? Rspunsul este DA!
Fie V = {a} i presupunem c fiecare
submulime din V* este limbaj. S enumerm
aceste limbaje (se poate ): L
0
, L
1
, , L
n
,
Considerm mulimea S = {a
n
| a
n
eL
n
, n>=0}.
Descrierea lui S este finit nct S este limbaj,
adic exist k astfel nct S = L
k
. Atunci:
a
k
e S ddac a
k
e L
k
ddac a
k
e S - absurd!
Aadar, exist submulimi din V* care nu sunt
limbaje
10 G. Grigoras, LFAC
Gramatici
Sistemul G = (N, T, S, P) este o gramatic dac:
N i T sunt vocabulare disjuncte
N este mulimea neterminalilor utilizai pentru a
descrie structura limbajului
T este mulimea simbolurilor terminale caracterele
care formeaz cuvintele limbajului
S este neterminalul iniial (simbol de start), S e N
P este o mulime finit de reguli (producii, reguli
de nlocuire, reguli de rescriere) de forma x y
unde x, ye (N T)* i x conine cel puin un
neterminal
11 G. Grigoras, LFAC
Derivare, limbaj generat
Fie G = (N, T, S, P) o gramatic, u, v e (N T)*
Spunem c v este derivat ntr-un pas de la u prin
aplicarea regulii x y , i scriem u v, dac u = pxq
iar v = pyq.
Dac u
1
u
2
u
n
, n > 1, spunem c u
n
este
derivat din u
1
n G i scriem u
1

+
u
n
Scriem u * v dac u = v sau u
+
v
Limbajul generat de G este definit prin:
L(G) = {w e T*| S
+
w}
Dou gramatici G1 i G2 sunt echivalente dac
genereaz acelai limbaj: L(G
1
) = L(G
2
)
12 G. Grigoras, LFAC
Clasificarea gramaticilor(Chomsky)
Tipul gramaticii Restricii asupra
regulilor
Avantaje/Dezavantaje
Gramatici generale
(Tip 0)
Nu sunt Poate fi descrise orice limbaj / Nu exist un
algoritm general de recunoatere
Gramatici
dependente de
context
(Tip 1)
pxq pyq unde
y c, p,q e (N T)*
S , caz n care S nu
apare n dreapta
produciilor
Pot fi descrise toate trsturile limbajelor de
programare, exist algoritmi generali de
recunoatere dar sunt ineficieni
Gramatici
independente de
context
(Tip 2)
A y unde
A e N i y e (N T)*
Algoritmi generali de recunoatere eficieni,
utilizai n practic (compilare). Nu pot fi
exprimate trsturi semantice (ex. legtura
ntre utilizarea variabilelor i declararea
acestora)
Gramatici regulate
(Tip 3)
A u sau A uB
unde A, B e N i
u e T*.
Exist metode secveniale de recunoatere, Pot
fi descrise doar trsturi secveniale ale
limbajelor de programare (identificatori,
constante etc.) dar nu expresii, instruciuni
13 G. Grigoras, LFAC
Exemple
L = {a
n
b
n
c
n
| n1}
Definiia inductiv:
a
1
b
1
c
1
= abc e L
Dac a
n
b
n
c
n
e L atunci i a
n+1
b
n+1
c
n+1
e L
Nici un alt cuvnt nu face parte din L
Definiia generativ (o gramatic):
G = (N, T, S, P), N = {S, X}, T = {a, b, c}, P const din: S
abc, SaSXc, cXXc, bX bb
Derivarea cuvntului a
3
b
3
c
3
:
S aSXc aaSXcXc aaabcXcXc aaabXccXc
aaabbccXc aaabbcXcc
aaabbXccc aaabbbccc = a
3
b
3
c
3
Obs. G este gramatic de tip 1
14 G. Grigoras, LFAC
Exemple
Construii o gramatic de tip 1 pentru limbajul {a
n
b
n
c
n
d
n
| n 1}
Construii o gramatic de tip 2 pentru limbajul {a
n
b
n
| n 1}
Construii o gramatic de tip 3 pentru limbajul {a
n
b
m
| n, m 1}
Fie G = ({E}, {a, +, -, (, )}, E, {Ea, E(E+E), E(E-E)}).
Ce tip are gramatica G ?
Construii derivri din E pentru cuvintele (a+a) i ((a+a)-a)
Cuvntul (a+a-a) poate fi derivat din E?
Descriei limbajul L(G)
15 G. Grigoras, LFAC
Ierarhia lui Chomsky
Un limbaj L este de tipul j dac exist o gramatic G
de tipul j astfel nct L(G) = L, unde j e {0, 1, 2, 3}.
Vom nota cu L
j
clasa limbajelor de tipul j, unde j e
{0, 1, 2, 3}.
Ierarhia lui Chomsky: L
3
c L
2
c L
1
c L
0
Incluziunile sunt stricte:
orice limbaj de tip j+1 este i de tip j e {0, 1, 2}.
exist limbaje de tip j care nu sunt de tip j+1, j e {0, 1, 2}.
16 G. Grigoras, LFAC
Operaii cu limbaje
Limbajele fiind mulimi, suntem ndreptii s
vorbim despre reuniune, intersecie, etc. de limbaje
Exist i operaii specifice :
Produsul de limbaje: L
1
L
2
= { uv | u eL
1
, v eL
2
}
Iteraia (produs Kleene): L* =
n>0
L
n
, unde L
0
= {c} iar
L
n+1
= L
n
L
Pref(L) = { u | uv eL}
L
R
= { w
R
| w eL}; dac w = a
1
a
n
atunci w
R
= a
n
a
1
Proprieti
Fiecare din familiile L
j
cu 0 j 3 conine toate limbajele
finite.
Fiecare din familiile L
j
cu 0 j 3 este nchis la operaia
de reuniune
17 G. Grigoras, LFAC
Gramatici i limbaje regulate
O gramatic G = (N, T, S, P) este de tip 3 (regulat) dac regulile
sale sunt de forma A u sau A uB unde A, B e N iar u e T*.
O gramatic de tip 3 este n form normal dac regulile sale
sunt de forma A a sau A aB, unde a e T, i eventual S c
(n care caz S nu apare n dreapta regulilor).
Orice gramatic de tip 3 admite o form normal echivalent:
Orice regul de forma A a
1
a
2
a
n
se nlocuiete cu A a
1
B
1
, B
1
a
2
B
2
, , B
n-2
a
n-1
B
n-1
, B
n-1
a
n
n > 1, B
1
,, B
n-1
fiind neterminali noi
Orice regul de forma A a
1
a
2
a
n
B se nlocuiete cu A a
1
B
1
, B
1
a
2
B
2
, ,
B
n-2
a
n-1
B
n-1
, B
n-1
a
n
B n > 1, B
1
,, B
n-1
fiind neterminali noi
Se poate arta c pot fi eliminate regulile de forma A B (redenumiri) i cele de
forma A c (reguli de tergere), cu excepia, eventual a regulii S c
Transformrile care se fac nu modific limbajul generat de gramatic
18 G. Grigoras, LFAC
Exemple
Considerm gramatica G
1
= ( {A, B} , {l,d} , A, P
1
)
unde P
1
const din regulile:
A lB B lB|dB|l|d l = liter, d = cifr
L(G
1
) este mulimea identificatorilor
Considerm gramatica G
2
= ( {A, B} , {+,-,d} , A, P
2
)
unde P
2
const din regulile:
A +B|-B|dB|d B dB|d d = cifr
L(G
2
) este mulimea constantelor ntregi
19 G. Grigoras, LFAC
Proprieti de nchidere
Fie L, L1, L2 limbaje regulate, ceea ce nseamn c
exist gramaticile G, G1, G2 astfel ca
L = L(G), L1 = L(G1) i L2 = L(G2).
Atunci, urmtoarele limbaje sunt de asemenea
regulate:
(a) L1 L2 (b) L1 L2 (c) L1 L2
(d) L1\L2 (e) L* (e) L
R
20 G. Grigoras, LFAC
Proprieti de nchidere
Demonstraii
Fie G1 = (N1, T1, S1, P1) si G2 = (N2, T2, S2,P2) cu L1 = L(G1),
L2 = L(G2)
Presupunem N1 N2 = (eventual prin redenumirea
simbolurilor se obine acest lucru).
(a)Gramatica G = (N1 N2 {S}, T1 T2, S, P1 P2 {S
S1, S S2}) genereaz limbajul L1 L2
(b)Gramatica G = (N1 N2, T1 T2, (S1, S2), P), unde P const
din:
(S1, S2) dac S1 i S2
(A1, B1) a(A2, B2) dac A1 aA2 i B1 aB2
(A1, A2) a dac A1 a i A2 a
genereaz limbajul L1 L2 (s-au considerat G1, G2 n form
normal)
21 G. Grigoras, LFAC
Proprieti de nchidere
(c) Gramatica G = (N1 N2, T1 T2, S1, P) unde P const din:
- regulile de forma A uB din P1
- reguli A uS2 pentru orice regul A u din P1
- toate regulile din P2
genereaz limbajul L1L2
(e) G=(N ,T,S,P)
P: -reguli A uB din P
-reguli A uS, pentru orice regula A u din P
- regula S c
genereaz L*
etc. (exerciiu)
22 G. Grigoras, LFAC
Lema de pompare (Bar Hillel)
Fie L un limbaj de tip 3. Exist un numr m astfel nct
oricare ar fi cuvntul w e L cu |w| m, acesta are o
descompunere de forma w = xyz, unde 0 < |y| m, i
xy
i
z e L oricare ar fi i 0.
Demonstraie
Fie G=(N, T, S, P) astfel ca L(G)=L. Dac |N| este numrul
simbolurilor din N , m=|N|+1, se arat c are loc proprietatea
enunat:
Fie w=a
1
a
2
.a
n
, n m n |N|+1
S a
1
A
1
a
1
a
2
A
2
. a
1
a
2
a
k
A
k
.. a
1
a
2
a
k
a
k+1
..a
s
A
s
.a
1
a
2
a
k
a
k+1
..a
s
a
s+1
.a
n-1
A
n-1
a
1
a
2
a
k
a
k+1
..a
s
a
s+1
.a
n-1
a
n
A
k
=A
s
23 G. Grigoras, LFAC
Lema de pompare (Bar Hillel)
w=a
1
a
2
.a
n
, n m
S a
1
A
1
a
1
a
2
A
2
. a
1
a
2
a
k
A
k
.. a
1
a
2
a
k
a
k+1
..a
s
A
k

a
1
a
2
a
k
a
k+1
..a
s
a
s+1
.a
n-1
A
n-1
a
1
a
2
a
k
a
k+1
..a
s
a
s+1
.a
n-1
a
n
Atunci: A
k
* a
k+1
..a
s
A
k
si
A
k
*a
s+1
.a
n-1
a
n
Fie x= a
1
a
2
a
k,
y=a
k+1
..a
s
si z= a
s+1
.a
n-1
a
n
- Pentru i=0, xz eL(G):
S a
1
a
2
a
k
A
k
* a
1
a
2
a
k
a
s+1
.a
n-1
a
n
= xz
24 G. Grigoras, LFAC
Lema de pompare (Bar Hillel)
w=a
1
a
2
.a
n
, n m
S a
1
A
1
a
1
a
2
A
2
. a
1
a
2
a
k
A
k
.. a
1
a
2
a
k
a
k+1
..a
s
A
k
a
1
a
2
a
k
a
k+1
..a
s
a
s+1
.a
n-1
A
n-1
a
1
a
2
a
k
a
k+1
..a
s
a
s+1
.a
n-1
a
n
A
k
* a
k+1
..a
s
A
k
si
A
k
*a
s+1
.a
n-1
a
n
x= a
1
a
2
a
k,
y=a
k+1
..a
s
z= a
s+1
.a
n-1
a
n
- Pentru i > 0, xy
i
z eL(G):
S a
1
a
2
a
k
A
k
*a
1
a
2
a
k
(a
k+1
..a
s
)A
k
*
*a
1
a
2
a
k
(a
k+1
..a
s
) (a
k+1
..a
s
)A
k
**
* a
1
a
2
a
k
(a
k+1
..a
s
)
.
(a
k+1
..a
s
)A
k
*
*a
1
a
2
a
k
(a
k+1
..a
s
)
.
(a
k+1
..a
s
) a
s+1
.a
n-1
a
n
= xy
i
z
25 G. Grigoras, LFAC

S-ar putea să vă placă și