Sunteți pe pagina 1din 23

Curs 4- plan

Gramatici i limbaje independente de context


Eliminarea simbolurilor inutile
Eliminarea regulilor de tergere
Eliminarea redenumirilor
Eliminarea recursivitii stngi
Forma normal Chomsky
Automate pushdown
Definiii
Limbajul recunoscut
Echivalena cu gramaticile de tip 2
Gh. Grigoras 1
Eliminarea simbolurilor inutile
Un simbol X din NT este inaccesibil dac nu exist nici o
derivare de forma S + X
Un simbol A din N este neproductiv dac nu exist nici o
derivare de forma A + w, w T*
Un simbol este inutil dac este inaccesibil sau neproductiv
Pentru orice gramatic independent de context G exist o
gramatic G de acelai tip, fr simboluri inutile, echivalent
cu G
Pentru eliminarea simbolurilor inutile:
Se determin i apoi se elimin simbolurile neproductive i toate
produciile ce conin mcar unul dintre acestea
Se determin apoi se elimin simbolurile inaccesibile i toate
produciile aferente

Gh. Grigoras 2
Eliminarea simbolurilor neproductive
Intrare: G = (N, T, S, P)
Ieire: G = (N, T, S, P) L(G) = L(G), N conine doar simboluri productive
Metoda:
N1 =
do
{
N0 = N1
N1 = N0 { A| A P, (N0T)*}
} while N1 N0
N = N1
P = {A P| A N, (NT)*}

Se dovedete uor c algoritmul este corect


Consecin: L(G) ddac S N

Gh. Grigoras 3
Eliminarea simbolurilor inaccesibile
Intrare: G = (N, T, S, P)
Ieire: G = (N, T, S, P) L(G) = L(G), n G toate simbolurile sunt accesibile
Metoda:
V1 = {S}
do
{
V0 = V1
V1 = V0 { X| X NT, A X P, A V0N }
} while V1 V0
N = N V1
T = T V1
P = { A P | A N, (NT)*}

Se dovedete uor c algoritmul este corect

Gh. Grigoras 4
Exemplu
G = ({S, A, B}, {a,b}, S, {S a|A, A AB, B b})
Eliminarea simbolurilor neproductive duce la:
G = (,S, B-, ,a,b-, S, ,S a, B b})

Eliminarea simbolurilor inaccesibile duce la:


G = (,S-, ,a-, S, ,S a-)

Ce se intmpl dac se aplic algoritmii n ordinea


invers?

Gh. Grigoras 5
Eliminarea regulilor de tergere
Intrare: G = (N, T, S, P)
Ieire: G = (N, T, S, P) L(G) = L(G) {}, P nu are reguli de
tergere
Metoda:
N1 = {A| A N, A P}
do
{
N0 = N1
N1 = N0 { X| X N, X P, N0*
}
} while N1 N0

Gh. Grigoras 6
Eliminarea regulilor de tergere
P se obtine din P astfel:
- In fiecare productie A P se pun in evidenta
simbolurile din N1 ce apar in : = 1X12X2...
nXnn+1, Xi N1
- Se inlocuieste fiecare productie de acest fel cu
multimea de productii de forma A 1Y12Y2...
nYnn+1 unde Yi = Xi sau Yi =
in toate modurile posibile (2n)
- Se elimina toate regulile de stergere

Se dovedete uor c algoritmul este corect


Pentru a obine cuvntul nul (dac S este n N1) se
adaug S S i S

Gh. Grigoras 7
Eliminarea regulilor de tergere
Exemplu:
G = ({S, A, B, C}, {a, b, c-, S, ,S ABC, A aA|, B bB|,
C cC| })

N1 = {S, A, B, C}
G = (,S, S, A, B, C}, {a, b, c-, S, P)
P = ,S ABC|AB| AC|BC| A|B|C,
A aA| a, B bB | b, C cC | c, S S, S }

Gh. Grigoras 8
Eliminarea redenumirilor A B
Intrare: G = (N, T, S, P) fr simboluri inutile
Ieire: G = (N, T, S, P) L(G) = L(G), G liber de redenumiri
Metoda:
for(A N) // se determina toate redenumirile lui A
{
N1 = {A}
do
{
N0 = N1
N1 = N0 { C| B C P, B N0}
} while N1 N0
NA = N1
}
P =
for(A P| N)
for(X N and A NX)// X se rescrie in k>=0 pasi in A
P = P {X }

Gh. Grigoras 9
Orice limbaj independent de context poate fi
generat de o gramatic fr simboluri inutile,
fr reguli de tergere (cu excepia eventual a
regulii S ) i fr redenumiri. Spunem c o
astfel de gramatic este n forma redus

Un neterminal A este recursiv dac exist mcar


o derivare A + A. Dac = atunci A se
zice stng recursiv, dac = atunci A se zice
drept recursiv.

Gh. Grigoras 10
Eliminarea recursivitii stngi
Intrare: G = (N, T, S, P) n forma redus
Ieire: G = (N, T, S, P) fr recursie stng, echivalent
Metoda:
1. Se ordoneaz N; fie N = N = { A1, A2, , An}
2. for(i = 1..n)
1. Se inlocuiesc toate productiile de forma Ai Ai| ( nu
incepe cu Ai) cu productiile Ai | Ai , Ai | Ai ,
unde Ai este un neterminal nou ce se adauga la N
2. for (j = 1..i & i <n)
Fiecare productie Ai+1 Aj se inlocuieste cu Ai+1
pentru toate productiile Aj
3. N este obtinuta din N prin adaugarea tuturor neterminalilor nou
introdusi iar P este noua multime de reguli

Prin transformarile facute nu se schimba limbajul generat iar regulile gramaticii


sunt de forma Ai Aj| cu j > i si incepe cu un terminal.
Simbolurile nou introduse sunt drept recursive

Gh. Grigoras 11
Exemplu
G = (,E, T, F-, ,+, *, (, ), a-, E, P) unde P const din
E E+T, E T , T T*F, T F , F (E), F a

E E+T | T se nlocuiesc cu E T | TE, E +T | +TE

T T*F | F se nlocuiesc cu T F| FT, T *F| *FT

Noua gramatic este: G = (,E, T, F, E, T-, ,+, *, (, ), a-, E, P), unde


P:
E T | TE, E +T | +TE, T F| FT, T *F| *FT, F (E) | a

Exerciiu: Eliminai recursia stng din gramatica cu regulile:


A BC | a, B CA | Ab, C AB| CC| a

Gh. Grigoras 12
Forma normal Chomsky
Se pot construi diverse forme normale (restricii asupra regulilor)
pentru gramaticile de tip 2:
Forma normal Chomsky: A BC, A a ( i eventual S )
Forma normal Greibach: A a, N* (i eventual S )
Forma normal operator: A , nu conine 2 neterminali
consecutivi (orice 2 operanzi sunt desparii de un operator) (i
eventual S )

Teorem: Orice limbaj independent de context poate fi generat de


o gramatic n forma normal Chomsky)
Fie L limbaj generat de o gramatic independent de context
redus. Va trebui s transformm regulile ce nu sunt n form
normal Chomsky:
Gh. Grigoras 13
Forma normal Chomsky
Dac A x1x2xn, n > 1 este o astfel de regul atunci:
Scriem A X1X2Xn, unde Xi = if xi N then xi else Xa , dac xi = a
Adugm toate regulile Xa a
Regula A X1X2Xn , dac n > 2, o nlocuim cu:
A X1Z1, Z1 X2Z2, , Zn-3 Xn-2Zn-2, Zn-2 Xn-1Xn
unde Z1, Z2, , Zn-2 sunt neterminali noi.

Se transform n acest mod toate regulile care nu sunt n form


normal Chomsky: aceste transformri nu schimb limbajul
generat i gramatica obinut este n form normal Chomsky.

Orice limbaj independent de context poate fi generat de o


gramatic n form normal Greibach (exerciiu). (se consider o
gramatic n form normal Chomsky fr recursie stng)
Gh. Grigoras 14
Algoritmul Cocke Younger Kasami
Problema recunoaterii n gramatici n forma
normal Chomsky se poate rezolva cu
algoritmul CYK n timp O(n3).
Dac w = a1a2an atunci se constuiesc
mulimile Vij = {A | A + aiai+1ai+j-1} inductiv
pentru j = 1, j = 2, etc.:
Vij = {A| A BC, B Vik, C Vi+k j-k, k<j}

w L(G) S V1n
Gh. Grigoras 15
Automate pushdown
M = (Q, , , , q0, Z0, F)
Q este mulimea (finit a) strilor,
q0 starea iniial, F submulimea strilor finale
alfabetul de intrare
alfabetul memoriei pushdown (stiv)
Z0 simbolul iniial din stiv
: Q ( {} ) 2Q*

Modelul este nedeterminist


Gh. Grigoras 16
Configuraie, calcul
Fie M = (Q, , , , q0, Z0, F) un automat pushdown
Configuraie: (q, w, ) Q**, 1: top
Configuraie iniial: (q0, w, Z0) Q**
Micare(pas):
(q, aw, Z) (q, w, ) dac (q, ) (q, a, Z)
Calcul: nchiderea reflexiv i tranzitiv a relaiei
de mai sus:
C1 C2 Cn se scrie:
C1 + Cn dac n > 1, C1 * Cn dac n > 0
Gh. Grigoras 17
Limbajul recunoscut

Prin stri finale:


L(M) = {w |(q0, w, Z0) *(q, , ), q F, *}

Prin golirea stivei:


N(M) = {w |(q0, w, Z0) *(q, , ), q Q}

Gh. Grigoras 18
Echivalena definiiilor privind recunoaterea
Pentru orice automat pushdown M exist unul M astfel
ca N(M) = L(M)
Dac M = (Q, , , , q0, Z0, F), considerm
M = (Q{q, q0}, , ,Z0}, , q0, Z0, )
- Automatul M simuleaz M:
- din configuraia sa iniial trece n cea iniial a lui M
pstrnd Z0 n stiv;
- are n continuare aceleai micri ca ale lui M
- cnd M intr ntr-o stare final, M trece n starea q
care provoac golirea stivei

Gh. Grigoras 19
Echivalena definiiilor privind recunoaterea
Pentru orice automat pushdown M exist unul M astfel
ca L(M) = N(M)
Dac M = (Q, , , , q0, Z0, ), considerm
M = (Q{qf, q0}, , ,Z0}, , q0, Z0, {qf })
- Automatul M simuleaz M:
- din configuraia sa iniial trece n cea iniial a lui M
pstrnd Z0 n stiv;
- are n continuare aceleai micri ca ale lui M
- cnd M i golete stiva, M mai are n stiv Z0 i
trece n starea final qf

Gh. Grigoras 20
Exemple
Un automat pushdown ce recunoate limbajul ,anbn|
n>=1}
Dac se citete a se introduce n stiv
Pentru fiecare b citit se scoate un a din stiv
Un automat pushdown ce recunoate limbajul
{wawR|w{0,1}*}
Fiecare 0 sau 1 citit se introduce n stiv
a la intrare produce pregtirea scoaterii a cte un simbol
din stiv dac el coincide cu cel din intrare
Un automat pushdown ce recunoate limbajul
{wwR|w{0,1}*}
?
Gh. Grigoras 21
Automate pushdawn vs. L2
Pentru orice gramatic G exist un automat
pushdown M astfel nct N(M) = L(G)
Fie G = (N, T, S, P)
Construim M = ({q}, T, NT, , q, S, ) unde:
(q, , A) = {(q, )| A P}
(q, a, a) = {(q, )}
(q, x, y) = n restul cazurilor
w L(G) S + w (q, w, S) + (q, , )
M simuleaz derivrile extrem stngi din G
Gh. Grigoras 22
Automate pushdawn vs. L2
Pentru orice automat pushdown M exist o gramatic G
astfel nct L(G) = N(M)
Fie M = (Q, , , , q0, Z0, )
Construim G = (N, , S, P) astfel:
N = {[q, A, p]| p, q Q, A } {S}
P conine toate regulile de forma:
S [q0, Z0, q], qQ
[q, A, qm+1] a[q1,B1,q2][q2,B2,q3+*qm,Bm,qm+1]
q, q1,q2,,qm+1Q, a {}, B1, B2, Bm astfel ca
(q1,B1B2Bm) (q, a, A)
[q, a, q1] a, q, q1Q, a {}, A astfel ca
(q1,) (q, a, A)
Se dovedete c [q, Z, p] +w (q, w, Z) + (p, , )
Gh. Grigoras 23

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