nici o restrictie (suplimentara) referitoare la forma...
Transcript of nici o restrictie (suplimentara) referitoare la forma...
1/15/2015 LFTC (Dana Lupsa) 1 Ne reamintim : clasificarea Chomsky
• Gramatici de tip 0:
nici o restrictie (suplimentara) referitoare la forma regulilor de productie
• Gramaticile de tip 1
– a b P: |a| <= |b |
– caz special: S→ e poate P. In acest caz S nu apare în membrul
drept al nici unei reguli de productie.
• Gramatici de tip 2:
reg. productie sunt de forma A a , A N, a (N S )*
• Gramaticile de tip 3:
reg. prod. sunt de forma
• A aB
• A b unde A,B N si a,b S
caz special: S→ e poate P In acest caz S nu apare în membrul
drept al nici unei reguli de productie.
1/15/2015 LFTC (Dana Lupsa) 2
Ne reamintim :
• Gramatici echivalente
G1 echiv. cu G2 ddaca L(G1)=L(G2)
• Gramatici independente de context
(gramatici de tip 2)
G = (N, S , P, S)
reguli de productie de forma:
A a , A N, a (N U S )*
1/15/2015 LFTC (Dana Lupsa) 3
Simplificarea GIC
• simbol neproductiv
Un simbol A N este neproductiv dacã nu existã
nici o derivare de forma A =*> x (xS*)
• în caz contrar A este simbol productiv
• Teorema
G= (N, S, P, S) $ G' = (N', S', P', S) echivalentã,
fãrã simboluri neproductive
(transformari echivalente)
1/15/2015 LFTC (Dana Lupsa) 4
Determinarea simbolurilor productive
≈ algoritm AF determ. stari productive
1. i:=0 ; V0:= F
2. Repeta
Vi+1 :=Vi U{A | $A→ a P, a (ViUS)*}
i:=i+1
pana cand Vi=Vi-1
{Vi – multimea simbolurilor productive}
A → BC
B → bB
C → c
1/15/2015 LFTC (Dana Lupsa) 5
Simplificarea GIC
(transformari echivalente)
• simbol inaccesibil
Un simbol X N USeste simbol inaccesibil dacã nu
existã nici o * derivare: S=>* aXb (a,b(NUS)*)
• în caz contrar simbolul este accesibil
• Teorema
G= (N, S, P, S) $ G' = (N', S', P', S) echivalentã,
fãrã simboluri inaccesibile
1/15/2015 LFTC (Dana Lupsa) 6
Determinarea simbolurilor accesibile
≈ algoritm AF determ. stari accesibile
1. i:=0 ; V0:={S}
2. Repeta
Vi+1 :=Vi U{ B | $A Vi, a,bUS)* a.i
A→ aBb P}
i:=i+1
pana cand Vi=Vi-1
{Vi – multimea simbolurilor neterminale accesibile}
* analog pentru simboluri terminale accesibile
1/15/2015 LFTC (Dana Lupsa) 7
Simplificarea GIC
• Un simbol este neutilizabil dacã el este fie
inaccesibil, fie neproductiv
• Teorema
G= (N, S, P, S) $ G' = (N', S', P', S) echivalentã
fãrã simboluri neutilizabile
1/15/2015 LFTC (Dana Lupsa) 8
e-productii si gram. e-independente
• e-productie : o productie de forma A e
• Gramatica G = (N, S, P, S) este e-independentã daca:
a) dacã eL(G) atunci G nu are e-productii
b) dacã eL(G) atunci avem o singurã productie Se iar celelalte productii nu-l contin în membrul drept pe S
• Teorema
G= (N, S, P, S)
$ G' = (N', S', P', S) echivalentã, e-independentã
1/15/2015 LFTC (Dana Lupsa) 9
Eliminarea e-productiilor
1. Construim multimea Ne care are ca elemente acele
neterminale care prin derivare conduc la e adicã :
• Ne = {A | A N, A =>*e}
alg. ≈ determinarea simb. productive
2. Determinam noile reguli de productie
• astfel incat productiile de forma A→ e se elimina
• dar, daca eL(G), atunci $ S e si S nu apare în
membrul drept al nici unei productii
1/15/2015 LFTC (Dana Lupsa) 10
Determinarea lui Ne
1. i:=0 ;
V0:= {A | $A→ e P}
2. Repeta
Vi+1 :=Vi U{A | $A→ a P, a (Vi)*}
i:=i+1
pana cand Vi=Vi-1
1/15/2015 LFTC (Dana Lupsa) 11
determinam noile reguli de productie
• productiile de forma A→ e se elimina
• celelalte r.p. se rescriu astfel incat sa “suplineasca” eliminarea e-productiilor astfel:
Fie r.p. A→a0B1a1B2a2…Bkak
unde: Bi Ne
aj nu contine simb. din Ne
Se inlocuieste cu:
A→a0X1a1X2a2…Xkak
unde Xi = Bi este unul dintre Bi sau e e (se fac toate inlocuirile posibile)
Ce lipseste ???
1/15/2015 LFTC (Dana Lupsa) 12
determinam noile reguli de productie
• continuare
Dacã eL(G) trebuie sa avem o e-productie
“atunci avem productia S e si S nu apare în
membrul drept al nici unei productii”
(gram. e-independenta)
• adaugam un nou simbol de start S' si productiile
S’ e | S
1/15/2015 LFTC (Dana Lupsa) 13
Eliminarea e-productiilor
Exercitiu:
S → aSbS
S → bSaS
S → e
1/15/2015 LFTC (Dana Lupsa) 14
Redenumiri. Cicluri.
• redenumire: reg.prod. de forma A B
• Gramatica fãrã redenumiri: fara r.p. de redenumire
Teorema:
G= (N, S, P, S) $ G' = (N', S', P', S) echivalentã fãrã
redenumiri
• ciclu: o * derivare de forma A =>* B
• Gramatica fãrã cicluri: nu se pot obtine cicluri (la derivare)
Teorema:
G= (N, S, P, S) $ G' = (N', S', P', S) echivalentã fãrã
cicluri
1/15/2015 LFTC (Dana Lupsa) 15
Eliminarea redenumirilor
PP. G – e-independenta (daca nu , luam gr.echiv. e-ind.)
Pentru fiecare A N
se elimina redenumirile de forma A→B (B N )
• construieste multimile NA = {B | A=*> B};
(≈ det. simb. accesibile)
• determinam noile reguli de productie
1/15/2015 LFTC (Dana Lupsa) 16
Construieste NA
= {D | A=*> D}
1.i:=0 ;
V0:= {A}
2. Repeta
Vi+1 :=Vi U {C | (BC) P, B Vi}
i:=i+1
pana cand Vi=Vi-1
NA := Vi
1/15/2015 LFTC (Dana Lupsa) 17
determinam noile reguli de productie
A N:
• pentru fiecare A→a P executa
• daca a e format dintr-un singur neterminal
atunci
il excludem din mult. noilor reg.prod
altfel
adaugam: B→ a , BN a.i. A NB
• sf.daca
• sf.pentru
1/15/2015 LFTC (Dana Lupsa) 18
Eliminarea redenumirilor
Exercitiu:
E→E+T
E → T
T → T * F
T → F
F → (E)
F → a
1/15/2015 LFTC (Dana Lupsa) 19
Gramatica fara cicluri
Teorema:
G= (N, S, P, S) $ G' = (N', S', P', S) echivalentã
fãrã cicluri
Daca G – e-independenta si fara redenumiri
atunci este fara cicluri
1/15/2015 LFTC (Dana Lupsa) 20
Gramatica proprie:
este o gramatica
• fara simb. neutilizabile
• e-independenta
• fara cicluri
Teorema:
G= (N, S, P, S) $ G' = (N', S', P', S) proprie echiv.
1/15/2015 LFTC (Dana Lupsa) 21
Recursivitate
• reg.prod. recursiva la stanga:
o reg.prod. de forma: A→Aa
• reg.prod. recursiva la dreapta:
o reg.prod. de forma: A→aA
• reg.prod. recursiva:
o reg.prod. de forma: A→aAb
1/15/2015 LFTC (Dana Lupsa) 22
Reg. prod. recursive la stanga
• reg.prod. recursiva la stanga: A→Aa
Teorema:
G= (N, S, P, S) $ G' = (N', S', P', S) echivalentã
fãrã reg.prod. recursive la stanga
• PP. G – gr. proprie
(daca nu este, det. gr. proprie echiv. si lucram cu ea)
• Obs.: vom obtine tot o gramatica proprie
1/15/2015 LFTC (Dana Lupsa) 23
Eliminarea r.p. recursive la stanga
pentru fiecare A N: reg.prod.cu m.s. A
• grupam r.p. in recursive la stng. si nerec. la stanga
AAa1 | Aa2 | . . . |Aar (r.p. recursive)
Ab1| b2| . . . |bs (r.p. ne-recursive)
• r.p. se transforma astfel:
Ab1| b2| . . . |bs| b1 A’| b2 A’ | . . . |bs A’
A’a1 | a2 | . . . | ar |a1 A’ | a2 A’| . . . | ar A’
(a fost introdus un net. nou: A’)
1/15/2015 LFTC (Dana Lupsa) 24
Eliminarea r.p. recursive la stanga
Observatii:
• Recursivitatea nu se poate elimina.
• Recursivitatea la stanga a fost transformata în
recursivitate la dreapta.
Exercitiu
Eliminati recursivitatea la stanga:
S-> Sa
S->a
1/15/2015 LFTC (Dana Lupsa) 25
Recursivitate
• neterminal recursiv la stanga:
AN daca $ o derivare de forma: A=*>Aa
• neterminal recursiv la dreapta:
AN daca $ o derivare de forma: A =*> aA
• neterminal recursiv:
AN daca $ o derivare de forma: A =*> aAb
• gramatica recursiva la stanga:
are cel putin un neterminal recursiv la stanga
• gramatica recursiva la dreapta: …
1/15/2015 LFTC (Dana Lupsa) 26
Eliminarea recurs. la stg. a neterm.
Teorema:
G= (N, S, P, S) $ G' = (N', S', P', S) echivalentã fãrã neterminale recursive la stanga
• PP. G – gr. proprie (daca nu este, det. gr. proprie echiv. si lucram cu ea)
• impunem o ordine asupra neterminalelor
N = {A1,A2,…,An}
si apoi modific r.p. a.i. sa nu existe Ai→Aja cu j<=i
de aici => nu va exista recursivitate la stanga
1/15/2015 LFTC (Dana Lupsa) 27
Eliminarea recurs. la stg. a neterm.
pentru Ai de la A1 la An executa
//se elimina r.p. de forma Ai→Aja cu j<=i astfel:
*repeta
pentru j:=1,i-1 executa
* Ai→Aja (j<i) se inlocuieste cu: Ai→ba
cu toti b cu proprietatea Aj→bPinloc
sf.pentru
* se elimina r.p. de forma Ai→Aia
(se inlocuiesc cf.alg. de elim.r.p.rec.stg)
*pana cand toate r.p. cu Ai in m.s. respecta: $ j<i :Ai→Aja
sf.pentru
1/15/2015 LFTC (Dana Lupsa) 28
Eliminarea recurs. la stg. a neterm.
Exercitii:
(1) (2)
A → BC | a A → a | aB
B → CA | b B → AC | b
C → AB | c C → BA | c