Sunteți pe pagina 1din 322

Notiuni de baza

• alfabet • multimi speciale


• secventa • proprietati *
– lungime • limbaj
– secv. vida – cuvant
• concatenare • tipuri de limbaje
– notatii • specificarea unui limbaj
• subsecventa • operatii cu limbaje
– prefix
– sufix

10/2/2023 LFTC - Dana Lupsa 1


Alfabet
• Def:
Alfabet = o multime finitã si nevidã de elemente
numite simboluri
• Notatie: 

10/2/2023 2
Secventa
Def.
• secventa peste 
o succesiune finita de simboluri din 
• subsecventa
o succesiune de simboluri consecutive dintr-o
secventa

10/2/2023 3
Lungimea unei secvente
• def:
nr. de simboluri din care este formata acea secventa
• notatie
|…|
Ex: |abc| = 3

• Secv. vida = secv. de lungime 0


• notatie: e (unele surse l)

10/2/2023 4
Concatenare
Dacã
x=a1a2…an
y=b1b2…bm
atunci z = a1…anb1…bm
reprezintã concatenarea secventelor x si y
si se noteaza z = xy
Notatii: aa…aa = an
(de n ori)

10/2/2023 Exemplu: a2 = aa 5
Secventa
Def.
• secventa peste 
o succesiune finita de simboluri din 
• subsecventa
o succesiune de simboluri consecutive dintr-o
secventa

w2 – subsecventa a lui w1
daca $ secventele u, v a.i. w1= u w2 v
10/2/2023 6
Prefix, sufix
Fie x, y, z sunt secvente peste alfabetul 
• x este un prefix al secventei xy
• y un sufix al secventei xy

• Prefix: o subsecventa care


– fie este vida
– fie incepe cu primul simbol al secventei date
• Sufix: o subsecventa care
– fie este vida
– fie se termina cu ultimul simbol al secventei date
10/2/2023 7
Multimi speciale
• n = {w | w – secventa peste , |w| = n}
• * = {w | w – secventa peste , 0 <= |w| }
• + = {w | w – secventa peste , 0 < |w| }

• * = + U {e}

10/2/2023 8
Operatia *
Denumiri:
• Operatia: *, steaua lui Kleene
• Inchiderea lui Kleene

* - inchiderea alfabetului
- multimea tuturor secventelor ce se pot obtine
folosind secvente din 

( Similar pentru limbaje)


10/2/2023 9
* - proprietati

•  w1, w2  * avem: w1w2  *


•  w1, w2 , w3  * avem: (w1w2) w3 = w1(w2w3)
•  w  * , ew = we = w

(*, . ) - monoid

10/2/2023 10
Limbaj, cuvant
• def: (limbaj)
L – limbaj peste alfabetul 
daca L  *

• def: (cuvant)
Cuvant al unui limbaj – un element al limbajului

10/2/2023 11
Metode de specificare a unui limbaj
• enumerand elementele
• evidentierea unor proprietati ale elementelor
– folosind multimi si descrieri matematice
–…
• folosind gramatici, automate, expresii regulare
• …

10/2/2023 12
Cateva tipuri de limbaje
• teoretice
L = {an | n  N} limbaj peste  = {a}
L = {anbn | n  N} limbaj peste  = {a,b}
• informatice
limbajul identificatorilor
 = {a, …, z, A, …, Z,_, 0,…,9}
L = {a’w’ | a’  {a,…,z, A, …, Z,_}, w’  *}
• matematice
ex: limbajul reprezentarii zecimale a numerelor naturale

10/2/2023 13
Operatii cu limbaje (1)
Fie: L1 – limbaj peste 1 L2 – limbaj peste 2
(operatii cu multimi)
• L1  L 2 limbaj peste  ales corespunzator;
de exemplu:  = 1  2
• L1 L 2 limbaj peste  ( = 1  2)
• L1 – L 2 limbaj peste  ( = 1 )
• L1 L 2 limbaj peste  ( = 1  2)
(operatii bazate pe concatenare)
• câtul la dreapta: L1 / L2 = { w *| $ y L2: wy L1}
• câtul la stânga: L1 \ L2 = { w *| $ y L2: yw L1}
10/2/2023 14
Operatii cu limbaje (2)
• L limbaj peste un alfabet 
• complementara:

• închiderea reflexivã si tranzitivã:

• închiderea tranzitivã:

10/2/2023 15
Gramatica independenta de context
O gramatica independenta de context este un cvadruplu
G = (N,  , P, S)
• N este un alfabet de simboluri neterminale
•  este un alfabet de simboluri terminale
• N=f
• P  N x (N   )*
P multime finitã (multimea regulilor de productie)
• S N (simbolul de start - simbolul initial)

Notatie:
(a , b ) P se noteaza: a  b
(a se înlocuieste cu b)

10/2/2023 LFTC - Dana Lupsa 16


Doua tipuri de gramatici

• Gramatica independenta de context:


reg. productie sunt de forma A a , A N, a  (N   )*

• Gramatica regulara:
reg. prod. sunt de forma
• A aB
• A b unde A,B N si a,b 
caz special: S→ e poate  P In acest caz S nu apare în membrul
drept al nici unei reguli de productie.

10/2/2023 LFTC - Dana Lupsa 17


Backus Naur Form

• primitive (terminale)
• variabile metalingvistice : intre paranteze unghiulare
• conective metalingvistice: ::= , |

<intreg_fara_semn> ::= <cifra> |


<cifra> <intreg_fara_semn>
<cifra> ::= 0 | 1 | … | 9

10/2/2023 18
Extended Backus Naur Form

• primitive (terminale): intre “ghilimele”


• variabile metalingvistice
• conective metalingvistice: = , | ,
[ optional] , { de oricate ori}
• punctul este folosit ca sfarsit de regula

intreg_fara_semn = cifra { cifra } .


cifra = “0” | “1” | … | “9” .
10/2/2023 19
Operatii cu limbaje (1)
Fie: L1 – limbaj peste 1 L2 – limbaj peste 2
(operatii cu multimi)
• L1  L 2 limbaj peste  ales corespunzator;
de exemplu:  = 1  2
• L1 L 2 limbaj peste  ( = 1  2)
• L1 – L 2 limbaj peste  ( = 1 )
• L1 L 2 limbaj peste  ( = 1  2)
(operatii bazate pe concatenare)
• câtul la dreapta: L1 / L2 = { w *| $ y L2: wy L1}
• câtul la stanga:L1 \ L2 = { w *| $ y L2: yw L1}
10/2/2023 20
Operatii cu limbaje (2)
• L limbaj peste un alfabet 
• complementara:

• închiderea reflexivã si tranzitivã:

• închiderea tranzitivã:

10/2/2023 21
Analiza lexicala
Atomi lexicali:
– identificatori
– constante (literali)
– cuvinte cheie (cuvinte rezervate) spatiile "albe"
– operatori aritmetici, relationali, …
separatori

cuvinte cheie - simboluri sintactice


cuvinte rezervate - nu pot fi folosite ca identificatori
(semnificatii speciale)
10/2/2023 1
Analiza lexicala
Analiza lexicala
• Date: fisier text
• Rezultate: FIP, TS
sau: mesaj de eroare

TS: tabela de simboluri


– informatii despre identificatori si constante
nume, tip, …
FIP: forma interna a programului
– Cod atom lexical
– Pozitia in TS (unde e cazul)
10/2/2023 2
Analiza lexicala, FIP, TS – exemplu partial
• Care sunt elementele lexicale ?
if a< b then b:=a • Descrieti sintaxa instructiunilor.
• Creati un alt exemplu care
respecta sintaxa descrisa.

FIP TS
Cod atom Pozitie in TS Pozitie Atom Alte
Cod Atom lexical informatii
4
lexical 1 a …
0 1
0 ID 2 b …
3
1 CONST
0 2
2 :=
5
3 <
0 2
4 if
2
5 then 0 1

10/2/2023 3
Analiza lexicala (versiunea 1)

detecteaza

Pentru fiecare atom lexical din fisierul sursa


clasifica atom
codifica atom
Sf.pentru

10/2/2023 4
Analiza lexicala (versiunea 2)

Cat timp (mai exista caractere necitite in prg. sursa) ex.


detecteaza atom
clasifica atom
codifica atom
Sf.cattimp

10/2/2023 5
Analiza lexicala (versiunea 3)

Cat timp (mai exista caractere necitite in prg. sursa) ex


detecteaza atom
Daca e cuvant-cheie sau operator sau separator atunci
adauga in FIP codul corespunzator atomului
Clasifica

Altfel
Daca e identificator sau constanta
Daca nu exista deja in TS atunci adauga-l ; Sf. Daca
adauga in FIP codul coresp. atomului si pozitia in TS
altfel
Eroare
Sf.Daca
Sf. Daca
Sf.cattimp
10/2/2023 6
Analiza lexicala (versiunea 4)
Cat timp (mai exista caractere necitite in prg. sursa) ex
detecteaza atom
Daca atom e cuvant-cheie sau operator sau separator atunci
adaugaFIP(cod(atom), 0)
Altfel
Daca atom e identificator atunci
indice:=poz(atom,TS)
adaugaFIP((cod_id, indice)
altfel Daca atom e constanta atunci
indice:=poz(atom,TS)
adaugaFIP((cod_const, indice)
altfel
MesajEroare:, indicatie asupra erorii
sfDaca
Sf.Daca
Sf. Daca
Sf.cattimp
10/2/2023 7
Obs.: multe cautari in TS
++ urmatoarele faze !!
• TS fara organizare
- cautare secventiala
• organizare pt. cautare mai rapida
– ordonare (ordonata lexicografic)
• tabel ordonat lexicografic Probleme ?
• arbore binar de cautare echilibrat
– tabela de dispersie
cautare – fct. de dispersie
(hash)

.
10/2/2023 8
TS si programe cu mai multe blocuri
Obs.:
noi vom lucra doar cu
un singur bloc program

Se construieste cate o TS pt. fiecare bloc


Se construieste o tabela pentru incluziunea
blocurilor

Cum se modifica
algoritmul de cautare
in TS?

10/2/2023 9
Automat finit (AF)

Rezultate
Date
“aceptare”
sir simb. Automat sau
Finit “ne-acc.”
Automat finit: model fizic
Automat finit: model matematic
• Un automat finit este un ansamblu
M = (Q, , , q0, F) :
• Q – alfabetul starilor
•  – alfabet de intrare
•  : Qx → P(Q) functie de tranzitie
• q0  Q - stare initialã
• F  Q multimea stãrilor finale
AF – reprezentare tabelara
 aj

zi = 0 daca qi nu e stare finala


1 daca qi este stare finala
AF reprezentat tabelar; exemplu

 0 1

p q p 0

q r p 0

r r r 1
AF – reprezentare sub forma de graf
• graf orientat
• cu noduri si arce
etichetate

• (graf de tranzitii)
Configuratii si relatii de tranzitie
M = (Q, , , q0, F).
configuratie: (q,x)  Qx*
tranzitie: element din (Qx*) x (Qx*)

(p,aw)├─ (q,w) <=> (p,a) q;


• ├─ tranzitie directa p,q Q, a , w *
• ├─k k-tranzitie
• ├─+ +-tranzitie
• ├─* *-tranzitie
Limbaj acceptat; autom. echivalente
• Limbaj acceptat de automat
L(M) = {w | w *, (q0,w)├─* (qf,), qf F}
• Automate echivalente
M1 echivalent cu M2 daca: L(M1) = L(M2)
Automat finit - exemplu
Determinism
• Automat finit determinist (AFD)
|(q,a)| <=1  q  Q, a  
• Automat finit nedeterminist (AFN)
 q  Q, a   astfel incat |(q,a)| > 1
• Automat finit determinist complet definit
|(q,a)| = 1  q  Q, a  
Echivalenta dintre AFD si AFN
Teorema:
•  M1 – AFN  M2 – AFD echivalent

Constructie (nu demonstratie!):


• Pornim cu: M1=(Q1,1,1,q01,F1) – AFN oarecare
• Construim: M2=(Q2,2,2,q02,F2) – AFD
pe baza lui M1
a.i. L(M1) = L(M2)
Teor:  M1 – AFN  M2 – AFD echivalent
• 2 = 1
• Q2= P(Q1)
• q02 = {q01}
• F2 = {S  P(Q1) | S ∩ F1 <> Φ}
• 2(q,a) = {r  Q1 |  q1  q a.i. r  (q1,a)}

= Uq1  q (q1,a)

M2 – determinist (?)
Problema: determinati AFD echiv. pt.
AF – stari care nu contribuie la
acceptarea unui cuvant
• stare neproductiva – (nu e stare productiva)
• stare inaccesibila – (nu e stare accesibila)

• stare productiva: q  Q a.i.


 w  * si qf  F a.i. (q,w)├─*(qf,)
• stare accesibila: q  Q a.i.
 w  * a.i. (q0,w)├─*(q,)
Algoritm determin. stari accesibile
1. i:=0
A0:={q0}
2. Repeta
i:=i+1
Ai+1 :=Ai { qQ | p Ai,a a.i. q  (p,a)}
pana cand Ai=Ai+1
{Ai – multimea starilor accesibile}

10/10/2023 15
Algoritm determin. stari productive
1. i:=0
A0:=F
2. Repeta
i:=i+1
Ai+1=Ai { qQ | p Ai, a a.i. p  (q,a)}
pana cand Ai=Ai+1
{Ai – multimea starilor productive}

10/10/2023 16
Teorema:
 M1 – AF exista M2 – AF fara st. neproductive echiv.
Constructie (nu demonstratie!):
• Pornim cu: M1=(Q1,1,1,q01,F1) – AF oarecare
• determinam A – multimea starilor productive
(algoritmul anterior)
• Construim: M2 pe baza lui M1 (a.i. L(M1) = L(M2))

M2=(A,1,A,q01,F1)
L(M1) = L(M2) !

10/10/2023 17
Teorema:
 M1 – AF exista M2 – AF fara st. inaccesibile echiv.
Constructie (nu demonstratie!):
• … analog …

10/10/2023 18
alta metoda de determinare a AFD
? echivalent pentru un AFN dat

• M1 => ? M2
Ideea:
1. {q01}  Q2
pornim cu Q2={q01}
2. adaugam la Q2 toate submultimile lui Q1 la care se
poate ajunge prin functia de tranzitie, atunci cand
se aplica unei stari q  Q2 deja adaugata

10/10/2023 19
AFD complet definit
M = (Q, , , q0, F) (AFD)
•  : Qx → P(Q) functie de tranzitie ; | q,a | 
• …
Teor:  AFD  AFD complet definit echivalent
Constructie:
AFD => AFD complet definit:
• adaugam o stare (neproductiva) r si extindem  astfel:
•  (q,a)  Qx a.i. q,a devine: q,a r}
•  a r,a r}

10/10/2023 20
Minimizarea automatelor finite
Ce vrem:
Automat determinist cu numar minim de stari !

Automat redus
• AFD
• nu contine stari inaccesibile si neproductive
• nu contine perechi de stari echivalente

10/10/2023 21
Minimizarea AFD
• automat cu numar minim de stari
- fara stari –inaccesibile, neproductive
- mai putine stari ?
ideea: relatie de echivalenta; clase de echivalenta
• stari diferentiate
• stari k diferentiate
• stari echivalente
• stari k-echivalente
Automatul redus
Fie M1 – un automat finit oarecare
• Determinam AFD echivalent
• Eliminam starile inaccesibile si neproductive
• Determinam AFD echivalent complet definit

Fie M = (Q, , , q0, F) automatul rezultat.


• Determinam relatia ≡ (stari echivalente, clase de echivalenta)
• Pe baza relatiei ≡ determinam automatul:
M≡ = (Q/≡, , ≡, [q0], F≡)
Q/≡ - multimea claselor de echivalenta
≡([q],a) = [(q,a)]
F≡ = {[q] | q  F}
Automat redus
• Teorema
Automatul redus are numar minim de stari
dintre toate AFD echivalente
• Teorema
 M1 – AF  M2 – automat redus echivalent
Determinati clasele de echivalenta
ale starilor automatului de mai jos

determinati automatul redus !


Stari diferentiate
• o alta exprimare
q1,q2 sunt stari diferentiate de x  *
daca  qf  F a.i. (q1,x) ├─*(qf,)
si nu exista nici un qF a.i. (q2,x) ├─*(q,)
sau
daca  qf  F a.i. (q2,x) ├─*(qf,)
si nu exista nici un qF a.i. (q1,x) ├─*(q,)

• x (de mai sus) diferentiaza pe q1 si q2


Stari diferentiate
• o alta exprimare
PP. AFD complet definit
q1,q2 sunt stari diferentiate de x  *
daca  r1, r2 astfel incat: (q1,x) ├─*(r1,)
si (q2,x) ├─*(r2,)
are loc una dintre:
1. r1  F si r2  Q-F
2. r1  Q-F si r2  F
Relatii intre stari
• q1,q2 - stari diferentiate
– cf. def. de mai sus
– (  x  * care sa le diferentieze)
• stari k diferentiate
– daca  x  *, |x|≤k care sa le diferentieze
• stari echivalente (≡)
– daca nu exista x  * care sa le diferentieze
• stari k-echivalente (≡k)
– daca nu exista x  *, |x|≤k, care sa le diferentieze
Proprietati ale rel. de k-echivalenta (≡ )
k

• q1≡0q2 ddaca (q1,q2  F) sau (q1,q2  Q-F)

• ≡ 0  ≡1  ≡2  …  ≡n  …
• Daca (≡k) = (≡k+1) atunci (≡k) = ≡

Lema:
Pt. orice M exista n  N a.i. q1 ≡n q2 => q1≡ q2

• ideea: pot avea un nr. finit de relatii distincte (max. |Q|)


Faculty of Mathematics and Computer Science
Babeș-Bolyai University

Curs 3

• Gramatici. Clasificarea Chomsky


• Gramatici regulare
• Limbaje regulare. Echivalente
• Expresii regulare
•Proprietati de inchidere ale limbajelor regulare

10/17/2023 1
Gramatica
O gramatica este un cvadruplu G = (N, S , P, S)
• N este un alfabet de simboluri neterminale
• S este un alfabet de simboluri terminale
• NS=f
• P  (N  S )* N (N  S )* x (N  S )*
P multime finitã (multimea regulilor de productie)
• S N (simbolul de start - simbolul initial)

Notatie:
(a , b ) P se noteaza: a  b
(a se înlocuieste cu b)
10/17/2023 LFTC - Dana Lupsa 2
Notatii
• la nivel abstract (exemple matematice, specificari)
– S: a,b,… litere mici de la inceputul alfabetului
– N: A,B,.. litere mari de la inceputul alfabetului
– S sau N: X,Y,…litere mari de la sfarsitul alfabetului
– S* : x,y,… litere mici de la sfarsitul alfabetului
– ( S U N )* : a,b,… litere grecesti
• nu se folosesc spatii cand avem nevoie de mai multe
caractere pentru a specifica un simbol (terminal sau
neterminal)

10/17/2023 LFTC - Dana Lupsa 3


Relatii de derivare
relatii binare peste (S U N)* adica (S U N)* x (S U N)*
• derivare directa
g => d <=> $ g 1, g 2, a , b  (N U S )*
a.i. g = g 1a g 2, d = g 1b g 2, iar (a → b )  P
• k-derivare
(o succesiune de k derivãri directe)
• + derivare
dacã $ k>0 a.i. cele 2 secvente sã fie într-o relatie de "k
derivare"
• * derivare
daca fie cele 2 secvente sunt egale, fie intre ele exista o
relatie de +derivare
10/17/2023 LFTC - Dana Lupsa 4
Limbaj generat de o gramatica
• Limbaj generat gramatica G=(N,S,P,S)
L(G) = {w  S* | S w}
• Forma propozitionala
– a  (N U S)* a.i. S a
• Propozitie (cuvant)
– un element din L(G)
• Gramatici echivalente
daca genereaza acelasi limbaj

10/17/2023 LFTC - Dana Lupsa 5


Tipuri de gramatici
• Gramatica monotona
–  a  b  P: |a| <= |b | a , b  (N  S )*
– caz special: S→ e poate sa apartina lui P. In acest caz S nu apare
în membrul drept al nici unei reguli de productie.

• Gramatica dependenta de context


reguli de productie sunt de forma:
aAbagb AN
a , b, g  (N  S )* , g  e
– caz special: S→ e poate sa apartina lui P. In acest caz S nu apare
în membrul drept al nici unei reguli de productie.

10/17/2023 LFTC - Dana Lupsa 6


Tipuri de gramatici

• Gramatica regulara:
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.

• Gramatica independenta de context:


reg. productie sunt de forma A a , A N, a  (N  S )*

10/17/2023 LFTC - Dana Lupsa 7


Clasificarea Chomsky

• Gramatici de tip 0
nici o restrictie (suplimentara) referitoare la forma regulilor de productie
• Gramaticile de tip 1
dependente de context  gramatici monotone
( monotonic, non-contracting )

• Gramaticile de tip 2
gramatici independente de context
=> Limbaje independente de context
• Gramaticile de tip 3
gramatici regulare => Limbaje regulare

10/17/2023 LFTC - Dana Lupsa 8


Ierarhia Chomsky
Fie ~ 1959-1963

•L0 - multimea limbajelor generate de gram. de tip 0


•L1 - multimea limbajelor generate de gram. de tip 1
•L2 - multimea limbajelor generate de gram. de tip 2
•L3 - multimea limbajelor generate de gram. de tip 3
Are loc:
L0  L1  L2  L3
10/17/2023 LFTC - Dana Lupsa 9
Ierarhia Chomsky: observatii

Teorema:

Fiecare dintre familiile de limbaje:


L0 , L1 , L2 , L3
este inchisa fata de operatia de reuniune

10/17/2023 LFTC - Dana Lupsa 10


Limbaje regulare. Echivalente

• Limbaj regular
= limbaj generat de o gramatica regulara

• putere de exprimare
AF: AFN AFD
AF  gr.regulare
AF  (m.regulare  expr.reg.)

10/17/2023 LFTC (Dana Lupsa) 11


Multimi regulare
Fie S un alfabet.
Multimile regulare peste S se definesc recursiv astfel:
1 F este o m. reg. peste S
2. {e}
3. {a} daca: a  S
4. RUS daca R,S – multimi regulare peste S +
5. RS daca R,S – multimi regulare peste S
6. R* daca R – multime regulara peste S
7. Orice alta multime regulara se obtine aplicand de un
numar finit de ori reg. 1-6

10/17/2023 LFTC (Dana Lupsa) 12


Multimi regulare si expresii regulare
• Expresii regulare
1. F expr. reg. coresp. m.reg. F
2. e {e}
3. a daca: a  S {a}
4. r+s daca r,s – expresii regulare r|s RUS
5. rs daca r,s – expresii regulare RS
6. r* daca r – expresie regulara R*
7. Orice alta expr. reg. se obtine aplicand de un numar finit de ori reg. 1-6
• Expresii regulare echivalente:
– mult. regulare reprezentate de acestea sunt egale

10/17/2023 LFTC (Dana Lupsa) 13


Expresii regulare
• expresiile regulare – secv. obtinute prin
concatenarea de simb. din
S U {F, e, +, *, ( , )} ( … prioritate … )

• multimile regulare asociate expresiilor regulare


sunt limbaje regulare

Deci: Orice expresie regulara peste S


descrie un limbaj regular peste S

10/17/2023 LFTC (Dana Lupsa) 14


Proprietati de inchidere ale
limbajelor regulare

Teorema:
Daca
L1, L2 sunt limbaje regulare peste alfabetul S
atunci:
L1 U L2, L1∩ L2, L1L2, L1*, complement(L1)
sunt limbaje regulare peste alfabetul S

10/17/2023 LFTC (Dana Lupsa) 15


Lema de pompare pt. limbaje regulare
• Daca L este un limbaj regular,
• atunci $ p  N* ( fix pt. un limbaj dat )
(oricat de mare)
• astfel incat:
 w  L de lungime cel putin p
exista o descompunere de forma w=xyz,
unde 0 < |y| ≤ p
cu proprietatea ca: xyiz  L,  i  N

10/17/2023 LFTC (Dana Lupsa) 16


Lema de pompare pt. limbaje regulare

(enunt formal al teoremei)

10/17/2023 LFTC (Dana Lupsa) 17


Lema de pompare pt. limbaje regulare
(o alta versiune, mai “puternica”)

Daca L este un limbaj regular,


• atunci $ p  N* ( fix pt. un limbaj dat )
(oricat de mare)
• astfel incat:
 w  L de lungime cel putin p
exista o descompunere de forma w=xyz astfel incat
0 < |y|
|xy|≤p
xyiz  L,  i  N

10/17/2023 LFTC (Dana Lupsa) 18


Lema de pompare pt. limbaje regulare
Observatii:
• Lema da o conditie necesara dar nu suficienta
• daca un limbaj satisface conditiile lemei nu
inseamna ca este regular
• folosim negatia lemei de pompare pt. a dem. ca un
limbaj nu este regular

10/17/2023 LFTC (Dana Lupsa) 19


Lema de pompare pt. limbaje regulare
De ce se intampla asa:
• Daca L – limb. reg.
 exista G – gram. reg. a.i. L(G) = L (def.)
 exista M – AF a.i. L(M) = L (teorema)
• Fie p – nr. de stari ale lui M
• daca |w|>=p si w –acceptat
 $ un drum in graful asociat lui M a.i. etichetele arcelor sunt simb. din
w
 drumul e de lung. p ; adica trece prin p + 1 noduri din graf
 $ un nod prin care se trece de cel putin 2 ori
 ciclu/bucla – care se poate repeta de oricate ori !!
 se poate repeta sirul etichetelor arcelor din bucla !!
(de 0 sau mai multe ori)

10/17/2023 LFTC (Dana Lupsa) 20


Exemplu:
Lema de pompare pt. limbaje regulare
Fie L - limbajul regular corespunzator expresiei regulare:
aa*b*
1) fie w = ab ;
Puteti identifica o descompunere w=xyz a.i. xyiz in L ?
2) fie w = aa ;
Puteti identifica o descompunere w=xyz a.i. xyiz in L ?
-------------------------
Analog pt.: a(ba)*
si w = aba
-------------------------
Analog pt.: L={a,b} si w = a

10/17/2023 LFTC (Dana Lupsa) 21


Proprietati de inchidere ale limbajelor regulare

L1∩L2
• M1 = (Q1, S, d1, q01, F1)
• M2 = (Q2, S, d2, q02, F2)
• ? M = (Q, S, d, q0, F)

PP. ca aut. M1 si M2 sunt deterministe, complet definite !


(alg. de constr. !!)

• M = (Q1xQ2, S , d, (q01,q02), F1xF2)


• d((q1,q2),a) = (d1(q1,a),d2(q2,a))

10/17/2023 LFTC (Dana Lupsa) 22


10/17/2023 LFTC (Dana Lupsa) 23
Proprietati de inchidere ale limbajelor regulare

complement(L1)

• M1 = (Q1, S, d1, q01, F1)


• ? M = (Q, S, d, q0, F)

PP. ca aut. M1 este determinist complet definit !


(alg. de constr.)
• M1 = (Q1, S, d1, q01, Q1-F1)

10/17/2023 LFTC (Dana Lupsa) 24


Automate finite cu -miscari
M = (Q, , , q0, F) : …
•  : Q x ( U {}) → P(Q) functia de tranzitie
Ideea: putem avea si -tranzitii
(automate cu -tranzitii)
Teorema:
Pentru orice automat finit cu -miscari
exista un automat finit echivalent.
Obs. Conform definitiei pe care am dat-o (in cursul 2),
automatele finite sunt fara -miscari
11/28/2012 1
Automate finite cu -miscari
M = (Q, , , q0, F) :

•  : Qx( U {}) → P(Q) functie de tranzitie

Care este
automatul finit
echivalent?

11/28/2012 2
Echivalenta dintre expresiile
regulare si limbajele acceptate de AF
Teorema:
Daca r este o expresie regulara, atunci exista un AF care
accepta multimea secventelor reprezentate de aceasta
expresie (multimea regulara). Si reciproc.

• Echivalenta:
– constructia automatului echivalent
pentru fiecare dintre constructiile de mai sus
(nu vom face dem.)
– constructia expresiei regulare
ce descrie limbajul acceptat de un automat
(nu vom face dem.) ( ~ seminar)

10/23/2023 LFTC (Dana Lupsa) 1


Expresie regulara
=> limbaj acceptat de AF
• Expresii regulare
– 
–  Ne amintim!
– a daca: a  
– r+s daca r,s – expresii regulare
– rs daca r,s – expresii regulare
– r* daca r – expresie regulara
• Constructia automatului echivalent
pentru fiecare dintre constructiile de mai sus

10/23/2023 LFTC (Dana Lupsa) 2


Expresie regulara=> limbaj acceptat de AF

• Automatul ce accepta: F

• Automatul ce accepta: 

• Automatul ce accepta: a (daca: a  )

10/23/2023 LFTC (Dana Lupsa) 3


.

• Automatul ce accepta reuniunea limbajelor acceptate


de doua automate date
– se dau:

10/23/2023 LFTC (Dana Lupsa) 4


.

• Automatul ce accepta reuniunea limbajelor acceptate


de doua automate date
– AF cu  tranz.:

10/23/2023 LFTC (Dana Lupsa) 5


.

• Automatul ce accepta reuniunea limbajelor acceptate


de doua automate date
– AF

??! cel putin una


dintre q01 sau q02
e stare finala
10/23/2023 LFTC (Dana Lupsa) 6
.
• Automatul ce accepta reuniunea limbajelor acceptate
de doua automate date
– AF

Daca cel putin una


dintre q01 sau q02
este stare finala

...
10/23/2023 LFTC (Dana Lupsa) 7
.

• Automatul ce accepta concatenarea limbajelor


acceptate de doua automate date
– se dau

10/23/2023 LFTC (Dana Lupsa) 8


.

• Automatul ce accepta concatenarea limbajelor


acceptate de doua automate date
– AF cu  tranz.:

10/23/2023 LFTC (Dana Lupsa) 9


.

• Automatul ce accepta concatenarea limbajelor


acceptate de doua automate date
– AF

??! q02 stare finala

10/23/2023 LFTC (Dana Lupsa) 10


.

• Automatul ce accepta concatenarea limbajelor


acceptate de doua automate date
– AF

Daca q02 stare finala

10/23/2023 LFTC (Dana Lupsa) 11


.

• Automatul ce accepta orice secventa peste limbajul


acceptat de un automat dat
– se da:

10/23/2023 LFTC (Dana Lupsa) 12


.

• Automatul ce accepta orice secventa peste limbajul


acceptat de un automat dat
– AF cu  tranz.:

10/23/2023 LFTC (Dana Lupsa) 13


.

• Automatul ce accepta orice secventa peste limbajul


acceptat de un automat dat
– AF:

??! q01 stare finala OK !

10/23/2023 LFTC (Dana Lupsa) 14


Exercitii:
Expresie regulara=> limbaj acceptat de AF

• Automatul ce accepta reuniunea limbajelor acceptate


de doua automate date
– se considera AF pt.:
aa*
bb*
– se considera AF pt.:
a2n n – nr. natural; n>=0
b2n+1 n – nr. natural; n>=0

10/23/2023 LFTC (Dana Lupsa) 15


Exercitii:
Expresie regulara=> limbaj acceptat de AF

Construiti automatul ce accepta concatenarea


limbajelor acceptate de doua automate date.

a) Se considera AF pt.: a si b

b) Se considera AF pt.: a* si b*

c) Se considera AF pt.: a si b*

10/23/2023 LFTC (Dana Lupsa) 16


Exercitii:
Expresie regulara=> limbaj acceptat de AF

• Automatul ce accepta orice secventa peste limbajul


acceptat de un automat dat
– se considera AF pt.: a

10/23/2023 LFTC (Dana Lupsa) 17


Cursul
Multimi regulare anterior

Fie S un alfabet.
Multimile regulare peste S se definesc recursiv astfel:
1. F - multime reg. peste S
2. {} …
3. {a} daca: a  S
4. RUS daca R,S – multimi regulare peste S +
5. RS daca R,S – multimi regulare peste S
6. R* daca R – multime regulara peste S
7. Orice alta multime regulara se obtine aplicand de un
numar finit de ori reg. 1-6

10/23/2023 LFTC (Dana Lupsa) 1


Cursul
Multimi regulare si expresii regulare anterior

• Expresii regulare
1. F expr. reg. coresp. m.reg. F
2.  {}
3. a daca: a  S {a}
4. r+s daca r,s – expresii regulare r|s RUS
5. rs daca r,s – expresii regulare RS
6. r* daca r – expresie regulara R*
7. Orice alta expr. reg. se obtine aplicand de un numar finit de ori reg. 1-6
• Expresii regulare echivalente:
– mult. regulare reprezentate de acestea sunt egale

10/23/2023 LFTC (Dana Lupsa) 2


Cursul
Expresii regulare anterior

• expresiile regulare – secv. obtinute prin


concatenarea de simb. din
S U {F, , +, *, ( , )} ( … prioritate … )

• multimile regulare asociate expresiilor regulare


sunt limbaje regulare

=> orice expresie regulara peste S


este un limbaj regular

10/23/2023 LFTC (Dana Lupsa) 3


Expresii regulare si AF (exemplu)

Care este expresia regulara ce il descrie pe L(M)?


10/23/2023 LFTC (Dana Lupsa) 4
Proprietati: expresii regulare echivalente
• “ = “ noteaza relatia dintre 2 expresii regulare echivalente

(utilizarea lui F si )
(reuniune si concaten.)
F+r=r+F=r
r+s =s+r r=r=r
( r+s )+ t = r +(s + t) Fr=rF=F
( rs ) t = r ( st )
F* = 
(r+s)t = rt + st
r* +  =  + r* = r*
r(s+t) = rs + rt
( + r)* = r*
(r*)* = r*
(r*s*)* = (r+s)*
12/19/2012 LFTC (Dana Lupsa) 5
Expresii regulare

Exercitiu:
Fie r, s – expresii regulare oarecare
Demonstrati ca:
• r* r* = r *
• ( r*)* = r*
• (r*s*)* = (r + s)*

10/23/2023 LFTC (Dana Lupsa) 6


Gramatici
independente de context
(GIC)
(CFG – context free grammars)

derivari, arbori de derivare,


tipuri de gramatici independente de context,
gramatici echivalente - constructii

10/31/2023 LFTC (Dana Lupsa) 1


Ne reamintim: Gramatica
O gramatica este un cvadruplu G = (N, S , P, S)
• N este un alfabet de simboluri neterminale
• S este un alfabet de simboluri terminale
• NS=f
• P  (N  S )* N (N  S )* x (N  S )*
P multime finitã (multimea regulilor de productie)
• S N (simbolul de start - simbolul initial)

Notatie:
(a , b ) P se noteaza: a  b
(a se înlocuieste cu b)
10/31/2023 LFTC - Dana Lupsa 2
Ne reamintim: clasificarea Chomsky
• Gramatici de tip 0:
nici o restrictie (suplimentara) referitoare la forma regulilor de productie
• Gramaticile de tip 1 (gramatici monotone)
–  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 independente de context:


reg. productie sunt de forma A a , A N, a  (N  S )*
(gramatici de tip 2)

• 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.

10/31/2023 LFTC (Dana Lupsa) 3


derivari de stanga/ dreapta
• derivare de stânga =>st
o derivare directã in care se înlocuieste cel mai din
stânga neterminal
• derivare de dreapta =>dr
o derivare directã in care se înlocuieste cel mai din
dreapta neterminal

10/31/2023 LFTC (Dana Lupsa) 4


Analiza sintactica
• analizã sintacticã pt. cuvantul w
succesiunea de derivãri directe:
• S => a1 => a2 => . . . => an = w
altfel spus: reprezintã o derivare pentru cuvântul w
• analizã sintacticã descendentã
dacã aceastã succesiune de derivãri directe se obtine pornind
de la S si terminand cu w

• analizã sintacticã ascendentã


dacã aceastã succesiune de derivãri directe se obtine pornind
de la w si terminand cu S
10/31/2023 LFTC (Dana Lupsa) 5
Arbore de derivare
• Fie G = (N, S, P, S) o gramaticã independentã de context.
Numim arbore de derivare sau arbore de analizã
sintacticã un arbore cu radacina, ordonat,
cu urmatoarele proprietati:
1. Orice nod interior - o eticheta din N;
2. Orice nod frunza - o etichetã din S U {e}
3. Eticheta rãdãcinii este S;
4. Dacã un nod are eticheta A iar nodurile succesoare
acestuia, în ordine de la stânga la dreapta sunt etichetate cu
X1, X2, . . . Xn atunci A X1X2. . . Xn trebuie sã fie o
productie din P.

10/31/2023 LFTC (Dana Lupsa) 6


Arbore de derivare
• frontiera (frontul): nodurile terminale, în ordine de la
stânga la dreapta
• etichetele lor formeaza o secventa peste S*
• obs: denumirea de frontiera (front) se foloseste si pentru a
denumi succesiunea etichetelor nodurilor terminale

Teoremã.
Fie G = (N, S, P, S) o gramaticã independentã de context.
Un cuvânt w peste alfabetul S, deci din S*, apartine
limbajului generat de G, adicã w L(G), dacã si numai dacã
w este frontul unui arbore de analizã sintacticã.
10/31/2023 LFTC (Dana Lupsa) 7
Gramatica ambigua
O gramaticã G = (N, S, P, S) independentã de
context este ambiguã
dacã si numai dacã existã cel putin un cuvânt w care
admite doi arbori de derivare distincti; în caz contrar
gramatica este neambiguã.

•  $ 2 analize sintactice care folosesc numai


derivari de stanga, diferite
•  $ 2 analize sintactice care folosesc numai
derivari de dreapta, diferite

10/31/2023 LFTC (Dana Lupsa) 8


Descrieri echivalente. Forme normale
Ne reamintim :
O gramatica G1
este echivalenta cu gramatica G2
ddaca L(G1)=L(G2)

10/31/2023 LFTC (Dana Lupsa) 9


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ã e L(G) atunci G nu are e-productii
b) dacã e L(G) atunci avem o singurã productie
Se 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ã
10/31/2023 LFTC (Dana Lupsa) 10
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

10/31/2023 LFTC (Dana Lupsa) 11


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

10/31/2023 LFTC (Dana Lupsa) 12


Recursivitate
• neterminal recursiv la stanga:
AN daca $ o derivare de forma: A=+>Aa
• neterminal recursiv la dreapta:
AN daca $ o derivare de forma: A =+> aA
• neterminal recursiv:
AN daca $ o derivare de forma: A =+> aAb
• gramatica recursiva la stanga:
are cel putin un neterminal recursiv la stanga
• gramatica recursiva la dreapta: …
10/31/2023 LFTC (Dana Lupsa) 13
Forma normalã Chomsky
O gramaticã independentã de context G = (N, S , P, S) este în
forma normalã Chomsky (FNC)
dacã orice regula de productie din P este de una din formele:
a) A  BC A,B,C N;
b) A  a aS, A  N;
Si un caz special: S→ e poate  P. In acest caz S nu apare în
membrul drept al nici unei reguli de productie.

Teoremã. Oricare ar fi G=(N, S, P, S) o gramaticã


independentã de context, întotdeauna existã o gramaticã în
forma normalã Chomsky G', astfel încât L(G) = L(G').

10/31/2023 LFTC (Dana Lupsa) 14


Forma normalã Greibach
O gramaticã G = (N, S, P, S)
este în forma normalã Greibach (FNG)
dacã P are productii numai de forma:
A aa, A N, aS, aN*;
Si un caz special: S→ e poate  P. In acest caz S nu apare în
membrul drept al nici unei reguli de productie.

Teoremã. Oricare ar fi G = (N, S, P, S) o gramaticã


independentã de context, întotdeauna existã o gramaticã în
forma normalã Greibach, astfel încât L(G)=L(G').

10/31/2023 LFTC (Dana Lupsa) 15


Simplificarea GIC
• simbol neproductiv
Un simbol A N este neproductiv dacã nu existã
nici o derivare de forma A =*> x (xS*)

• în caz contrar A este simbol productiv

• Teorema
 G= (N, S, P, S) $ G' = (N', S', P', S) echivalentã,
fãrã simboluri neproductive
10/31/2023 LFTC (Dana Lupsa) 16
Simplificarea GIC
(transformari echivalente)
• simbol inaccesibil
Un simbol X N US este 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
10/31/2023 LFTC (Dana Lupsa) 17
Determinarea simbolurilor productive
A → BC
≈ algoritm AF determ. stari productive B → bB
C→c
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}

10/31/2023 LFTC (Dana Lupsa) 18


Determinarea simbolurilor accesibile
≈ algoritm AF determ. stari accesibile

1. i:=0 ; V0:={S}
2. Repeta
Vi+1 :=Vi U{ B   | $ A  Vi, a,bUS)* a.i
A→ aBb  P}
i:=i+1
pana cand Vi=Vi-1
{Vi – multimea simbolurilor neterminale accesibile}

* analog pentru simboluri terminale accesibile


10/31/2023 LFTC (Dana Lupsa) 19
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

10/31/2023 LFTC (Dana Lupsa) 20


.
Observatii:
Fie G= (N, S, P, S) o gramatica independenta de context:
• Fie un simbol neterminal A al gramaticii G.
Daca nu exista o regula de productie A  a in P
atunci A este neproductiv
• Fie un simbol terminal a al gramaticii G.
Daca nu exista o regula de productie de forma
B  a a b in P
atunci a este inaccesibil

10/31/2023 LFTC (Dana Lupsa) 21


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 e L(G), atunci $ S e si S nu apare în
membrul drept al nici unei productii

10/31/2023 LFTC (Dana Lupsa) 22


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

10/31/2023 LFTC (Dana Lupsa) 23


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 ???
10/31/2023 LFTC (Dana Lupsa) 24
determinam noile reguli de productie
• continuare
Dacã eL(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

10/31/2023 LFTC (Dana Lupsa) 25


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

10/31/2023 LFTC (Dana Lupsa) 26


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

10/31/2023 LFTC (Dana Lupsa) 27


Construieste NA = {D | *
A= > D}
1.i:=0 ;
V0:= {A}
2. Repeta
Vi+1 :=Vi U {C | (BC)  P, B  Vi}
i:=i+1
pana cand Vi=Vi-1

NA := Vi

10/31/2023 LFTC (Dana Lupsa) 28


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 , BN a.i. A  NB
• sf.daca
• sf.pentru
10/31/2023 LFTC (Dana Lupsa) 29
Eliminarea redenumirilor
Exercitiu:

E → E+T
E→T
T→T*F
T→F
F → (E)
F→a

10/31/2023 LFTC (Dana Lupsa) 30


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

10/31/2023 LFTC (Dana Lupsa) 31


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.

10/31/2023 LFTC (Dana Lupsa) 32


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

10/31/2023 LFTC (Dana Lupsa) 33


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
10/31/2023 LFTC (Dana Lupsa) 34
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
AAa1 | Aa2 | . . . |Aar (r.p. recursive)
Ab1| b2| . . . |bs (r.p. ne-recursive)

• r.p. se transforma astfel:


Ab1| 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’)
10/31/2023 LFTC (Dana Lupsa) 35
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

10/31/2023 LFTC (Dana Lupsa) 36


Recursivitate
• neterminal recursiv la stanga:
AN daca $ o derivare de forma: A=+>Aa
• neterminal recursiv la dreapta:
AN daca $ o derivare de forma: A =+> aA
• neterminal recursiv:
AN daca $ o derivare de forma: A =+> aAb
• gramatica recursiva la stanga:
are cel putin un neterminal recursiv la stanga
• gramatica recursiva la dreapta: …
10/31/2023 LFTC (Dana Lupsa) 37
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
10/31/2023 LFTC (Dana Lupsa) 38
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→bPinloc
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
10/31/2023 LFTC (Dana Lupsa) 39
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

10/31/2023 LFTC (Dana Lupsa) 40


Proprietati ale limbajelor
independente de context
.
Lema de pompare pentru limbaje
independente de context
Fie L un limbaj independent de context. Existã
atunci o constantã p dependentã numai de L astfel
cã dacã z L si |z|>=p, atunci avem descompunerea
z=uvwxy cu proprietãtile:
a) |vx| >= 1,
b) |vwx| <= p,
? S -> 0A1
c) uv wx y L  iN
i i
A -> 0S
A -> a
10/31/2023 LFTC (Dana Lupsa) 2
Lema de pompare pentru limbaje
independente de context

• definitia formala:

10/31/2023 LFTC (Dana Lupsa) 3


Proprietãti de închidere
ale limbajelor independente de context

Teoremã.
Dacã L1si L2 sunt limbaje independente de context atunci:
L1U L2 , L1L2 , L1*
sunt limbaje independente de context.

Observatie:
L1∩L2, compl(L1) - nu sunt neaparat l.i.c.

10/31/2023 LFTC (Dana Lupsa) 4


Exercitii

Pentru urmatoarele limbaje, scrieti cate o gramatica


independenta de context care le genereaza:

L1 = { anbn | n N}
L2 = { cn | n N}
L3 = { anbn cm | m, n N}
L4 = { anbm cm | m, n N}

L1 U L2 , L1L2 , L1*

10/31/2023 5
Problema 1:
Fie limbajul:
L = {anbncn | n  N}
Este independent de context?

Rezolvare:
 Facem observatia ca: z  L ddaca:
a. ordinea simb. este data de regulile:
i. simb. a apar inaintea simb. b si c
ii. simb. b apar inaintea simb. c
b. nr. simb. a este egal cu nr. simb. b este egal cu nr. simb. c
(si notam: nra(z)=nrb(z)=nrc(z))

Vom dem. ca nu este independent de context, prin reducere la absurd, folosind lema
de pompare pentru limbaje independente de context.
 PP. ca este independent de context.
Atunci au loc conditiile din lema de pompare
De aici rezulta ca  pN* astfel incat:
 z  L care satisfice
- |z|>=p
-  o descompunere z = uvwxy astfel incat: uviwxiy  L, i  N
si |vx| >=1
si |vwx|<=p

Dem., Versiunea 1:
Alegem z cu |z|>=p (satisface cond. de mai sus)
  n a.i.anbncn| >=p ; z  L => z = anbncn si |z|>=p
 z = uvwxy descompunerea din lema de pompare
ne aflam in unul din urmatoarele cazuri generale:
1. cel putin unul dintre v si x contin cel putin 2 simboluri (dintre a,b,c)
diferite; (cazul 1)
2. v si x contin un singur simbol de oricate ori (o sau mai multe)
dar acelasi simbol (sau a, sau b, sau c)
dar v si x nu pot fi ambele vide
(cazul 2)
3. v si x contin un simbol ( a, sau b, sau c) de oricate ori,
dar nu pot fi vide,
dar v si x nu contin acelasi simbol (cazul 3)

cazul 1: (vezi cazurile posibile pentru cazul 1; aleg unul dintre ele si dem. pt. el;
pentru celelalte demonstratia se face analog)
fie: v = ak1bk2 , k1>0, k2>0 (rel.1) (oricare x)
fie i =2
cf. Lemei de pompare: uv2wx2y  L
adica:
uv2wx2y = u ak1 bk2 ak1 bk2 wx2y  L ,
atunci cand k1>0 si k2>0 (cf. rel.1)
ar insemna ca simb. b pot sa apara inaintea simb. a
ceea ce nu e adevarat pentru cuvintele din L
(observatia (a.)(i.))
=> contradictie

Se poate dem. in mod analog ca:


- pentru oricare doua (sau trei) simboluri distincte ar fi format v, v2 nu va
mai pastra ordinea simbolurilor care este necesara pt.ca uv2wx2yL
... => contradictie
- pentru oricare doua (sau trei) simboluri distincte ar fi format x, x2 nu va
mai pastra ordinea simbolurilor care este necesara pt.ca uv2wx2yL
... => contradictie

cazul 2: (dintre cazurile posibile pentru cazul 2 aleg unul dintre ele si dem. pt. el)
fie: v = ak1 k1>=0
k2
x=a k2>=0

Stim ca: |vx| >=1


 |ak1ak2| >=1
 k1+ k2 > 0 (rel.2)
(k1, k2 – nu sunt simultan 0)
atunci: u = ak3 , k3>=0
k4
w=a , k4>=0
y = a n-k1-k2-k3-k4bncn , n-k1-k2-k3-k4 >=0
fie i =2: cf. lemei: uv2wx2y  L
uv2wx2y = ak3 a2*k1 ak4 a2*k2 a n-k1-k2-k3-k4bncn
dar: uv2wx2y  L => nra(z’)=nrb(z’)=nrc(z’)
k3+2*k1+k4 +2*k2+ n-k1-k2-k3-k4 = n = n
=> n+k1+k2 = n
=> k1+k2 = 0
dar (cf. rel.2) : k1+k2>0
=> contradictie

Se dem. analog pt. orice alte combinatii posibile atunci cand


si y si u contin un acelasi simbol (a, sau b, sau c),
ca in z’ = uv2wx2y nu are loc relatia nra(z’)=nrb(z’)=nrc(z’)
=> contradictie

cazul 3: (dintre cazurile posibile pentru cazul 3 aleg unul dintre ele si dem. pt. el)
fie: v = ak1 , k1>0 (rel.4)
x = bk2 , k2>0 (rel.5)
k3
atunci: u = a , k3>=0
y = bk4cn, k4>=0
w = an-k1-k3bn-k2-k4 , n-k1-k2>=0; n-k2-k4>=0

fie i =2; atunci uv2wx2y  L


uv2wx2y = ak3 a2*k1 an-k1-k2bn-k2-k4 b2*k2 bk4cn
z’ = uv2wx2y  L => nra(z’)=nrb(z’)=nrc(z’)
k3+2*k1+n-k1-k3 = n-k2-k4 + 2*k2 +k4 = n
=> n+k1 = n+k2 = n
=> k1=0 contrad cu (rel.4)
(=> k2=0, contrad. cu (rel.5))

Se dem. analog pt. orice alte combinatii posibile atunci cand


si v si x contin cate un simbol (a, sau b, sau c), dar nu acelasi
ca in z’= uv2wx2y nu are loc relatia nra(z’)=nrb(z’)=nrc(z’)
=> contradictie

cazurile posibile pt. cazul 1


z = anbncn , z = uvwxy
cel putin unul dintre v si x contin cel putin 2 simboluri (dintre a,b,c) diferite;
v = ak1bk2 , k1>0, k2>0 si nu specificam ce poate contine x
v = ak1bk2 ck3 , k1>0, k2>0, k3>0 si nu specificam ce poate contine x
v = bk2 ck3 , k2>0, k3>0 si nu specificam ce poate contine x
daca v contine un singur acelasi simbol, ne situam in cazul 1 daca:
x = ak1bk2 , k1>0, k2>0
x = ak1bk2 ck3 , k1>0, k2>0, k3>0
x = bk2 ck3 , k2>0, k3>0

analog se face dem. pt. fiecare dintre cazurile de mai sus (ajunge la o contradictie)

Exercitiu:
descrieti cazurile posibile pt. cazul 2 si cazul 3
Dem., Versiunea 2 ( scurta 😊 ):
Alegem z cu |z|>=p (satisface cond. de mai sus)
z = apbpcp
 => |z|>=p
 z = uvwxy descompunerea din lema de pompare

- astfel incat: uviwxiy  L, i  N


si |vx| >=1
si |vwx|<=p

Pentru ca |vwx|<=p : secventa vwx contine maxim 2 simboluri dintre a, b,c.


Astfel, in secventa uviwxiy exista cel putin un simbol care nu este “pompat” si cel putin
unul care este “pompat” ; astfel se pierde egalitatea dintre numarul de aparitii ale celor
doua simboluri.
/rn t, il4 f*F*r

S-) o4,t
4*roS
A-> q

5
,/r /
J

,lt\
I

t
o@,,/ o@
ls Xr
as
I
q
t

\t'... o 4}a \
i

fD
/f-\-
'q.

b&f,,xiL f
t-=-J
?n-7^"zt{ *4 4*6ri& *eoVed*i "O e'"4r1.
L1, ( e'l'l ,* J
$1: srL
{4na
(z '- ( ,' u*rxt {&' Se*>c Sz
I
{
tute
(.t ULz: s-> r/ LtLz: 5+*sz
54 sz tSl +
5(->o * L
rt')2 t{
n'1. (
{

9z -tz 9z
5z-> a *
Automate push-down
(APD)

.
11/7/2023 1
Automat Push Down (APD)
Definitie:
Un automat push-down (APD) este un ansamblu
M = (Q, S, G, d, qo,Zo, F) , unde:
• Q alfabetul starilor;
• S alfabetul de intrare;
• G alfabetul memoriei stivă; ;
• qoQ stare iniţială;
• ZoG simbolul de start al memoriei stivă;
• F Q mulţimea stărilor finale;
• d:Qx(S U {e})xGP (QxG*) funcţia de tranziţie
11/7/2023 2
Reprezentare

• enumerare
• tabelara
• sub forma de graf

11/7/2023 3
Reprezentare folosind enumerare
Exemplu:
• M=({q0,q1},{a,b},{A,Z}, d,q0,Z,{q0})
• d:
d(q0,a,Z) = {(q0,AZ)}
d(q0,a,A) = {(q0,AA)}
d(q0,b,A) = {(q1,e)}
d(q1,b,A) = {(q1,e)}
d(q0,e,Z) = {(q0,e)}
d(q1,e,Z) = {(q1,e)} … si F in celelalte cazuri
11/7/2023 4
Reprezentare tabelara
Exemplu:

Care este limbajul acceptat dupa criteriul stivei vide?


Dar dupa criteriul starii finale?
Dar daca starea finala ar fi q1?
11/7/2023 5
Configuratie
• formal:
(q,x,a) Q x S*x G*

• automatul se găseşte în starea q, pe banda de intrare


urmează să se citească (accepte) secvenţa x, iar în
memoria stivă avem secvenţa a
• configuratie initiala
(q0,w,Z0)

11/7/2023 6
Tranzitii
• ├─ tranziţie directă
(q,aw,Za)├─ (p,w,ga) <=> d(q,a,Z)'(p,g)
sau
(q,aw,Za)├─ (p,aw,ga) <=> d(q,e,Z)' (p,g) (e-tranziţie)

– unde p,q Q, aS, ZG, wS*, a,g din G*


• ├k─ k tranziţia (k tranziţii directe) ~AF
• ├+ ─ + tranziţia ~AF
• ├*─ * tranziţia ~AF

11/7/2023 7
Secventa acceptata de automat

• dupa criteriul stivei vide


Le(M) = {w| wS*, (qo,w,Zo) ├─ * (q,e,e), qQ}
– (q,e,e) - configuraţia finală după criteriul stivei vide

• dupa criteriul starii finale


Lf(M) ={w | wS*,(qo,w,Zo)├─ *(q,e,g), qF, gG*}
– (q,e,g), q F configuraţie finală după criteriul stării finale

11/7/2023 8
Le(M)={anbn| nN}
De ce? (justificare:)
in q0 – se accepta oricate simboluri a
cu ramanere in q0 si adaugare cate un A in stiva
adica: la fiecare citire de a adaug in stiva un A (1)
sau – se trece in starea q1 (dupa ce am citit cel putin un a, adica am A in stiva)
obs.: se poate trece in q1 oricand, fara modificarea stivei (2)
sau - se scoate Z din stiva
(acest lucru se poate intampla numai inainte de citirea unui simb)
=> se accepta secventa vida
in q1 – cand in varful stivei este un A, se citeste un b
adica: fiecare citire de b scoate un A din stiva (3)
sau: daca in varful stivei este un Z, acesta se scoate (goleste stiva)

din (1) , (2) , (3) => nr(a) = nr(b)


(4) q0 citeste a (oricati)
(5) q1 citeste numai b; nu se poate trece inapoi in q0
din 11/7/2023
(2) , (4) , (5) => simb. a citite inaintea simb b 9
Teoreme de echivalenta
Teoremă.
Fie automatul push-down M. Există întotdeauna un
automat push-down M' astfel încât Le(M') = Lf(M);
si reciproc.
Teoremă.
Oricare ar fi G – o gramatica independenta de
context, există un automat push-down M astfel încât
Le(M) = L(G);
si reciproc.

11/7/2023 10
G.I.C. => APD echivalent
Fie: G = (N, S, P, S) – gram. independenta de context
Cine este M - APD astfel incat L(G)=Le(M) ?

constructia:
M = ({q}, S, N U S, d, q, S, F )
1. dacă (Aa) P atunci (q,a )d (q,e,A);
2. d (q,a,a ) ={(q,e)} " aS ;
3. d (.,.,.) = F în celelalte cazuri.

11/7/2023 11
Determinism
M = (Q, S, G, d, qo, Zo, F)
este determinist ddacă:
"ZG "qQ , "aS
1) |d(q,e,Z)| = 0 si |d(q,a,Z)| <=1
2) |d(q,e,Z)| = 1 si |d(q,a,Z)| = 0

in caz contrar, automatul nu este determinist

• multimea limbajelor acceptate de APD nedeterministe este


strict mai larga decat multimea limbajelor acceptate de APD
deterministe
11/7/2023 12
Analizorul descendent cu
reveniri

• Automat: configuratii, tranzitii


• Se poate folosi pentru
gramatici nerecursive la stanga

11/14/2023 1
Analizorul descendent cu reveniri
Configuratie:
(s,i,a,b)
• s- starea automatului
– q – stare normala
– r – stare de revenire (sau b – back)
– t – stare de terminare (terminare cu succes)
– e – stare de eroare
• i – pozitia (urmatoare) in secventa de intrare
• a – stiva de lucru (de istorie): istoria r.p. aplicate
• b – stiva de intrare: partea inca neprelucrata

11/14/2023 2
Analizorul descendent cu reveniri
• configuratie initiala: (q,1,e,S)
• Tranzitii:
– expandare: (q,i,a,Ab) ├─ (q, i, aA1, g1b)
– avans: (q,i,a,aib) ├─ (q, i+1, aai, b)
– insucces de moment: (q,i,a,ab) ├─ (r,i,a,ab) , a<>ai
(q,i,a,e) ├─ (r,i,a,e) , in+1
– succes: (q,n+1,a,e) ├─ (t,n+1,a,e)

– revenire: (r,i,aa,b) ├─ (r,i-1,a,ab)

– alta incercare: (r,i, aAj, gjb) ├─ …

daca $ Aj+1→gj+1 ├─ (q,i,aAj+1,gj+1b)


altfel daca i =1, A=S ├─ (e,i,a,Ab)
a=e , b=e
altfel ├─ (r,i,a,Ab)
Orice altceva: blocare (eroare)
11/14/2023 3
Analizorul descendent cu reveniri

Observatii:
• Se numeroteaza regulile de productie
cu acelasi membru stang
• Stiva de lucru contine informatiile referitoare la
regulile de productie aplicate

11/14/2023 4
Schita subalgoritm ASDR
daca(s=r) atunci
Subalgoritmul ASDR(G, x, sir_prod) daca (varf(α) = un terminal a) atunci
s:=q; i:=1; α:=ε; β:=S; //config initiala i:=i-1;
Cattimp ((s≠t) si (s ≠e)) executa pop(α, a);
daca (s=q) atunci push (β, a);
daca (β=ε) atunci altfel // varf(α) - un Aj oarecare (indicatie pt. A→ ϒj)
daca (i=n+1)) atunci daca (exista r.p. A→ ϒj+1 ) atunci
s:=t s:=q;
altfel pop(α, Aj);
s:=r push(α, A j+1);
sf_daca pop(β, ϒ j );
altfel push (β, ϒ j+1 );
daca (varf(β) = un neterminal A) atunci altfel
pop(β, A); daca (i=1) si (A=S) atunci s:=e;
push(α, A1); altfel
push(β, ϒ1); pop( α, Aj );
altfel push( β, Aj );
daca (varf (β) = terminalul xi) atunci sf_daca
i:=i+1; sf_daca
pop(β, xi); Sf_daca
push(α, xi); Sf_daca
altfel s:=r; Sf_daca
sf_daca Sf_cattimp
sf_daca Daca s=e atunci tipareste “Eroare”
sf_daca altfel tipareste “Secventa este acceptata”
altfel constructie_sir_prod(G, α);
// … Sf_daca
Sf_subalgoritm
11/14/2023 5
.

Subalgoritmul constructie_sir_prod(G, α) este:

sir_prod:=“”;
Cattimp not vida(α) executa
daca varf(α) este de forma Aj atunci
sir_prod:= sir_prod + indicativ_rp(varf(α));
sf_daca
pop(α);
Sf_Cattimp
Sf_subalgoritm

11/14/2023 6
Gramatici recursive  curs 5

11/14/2023 10
Analiza sintactica descendenta.
Gramatici si analiza LL(K)
.

11/21/2023 1
FIRSTk

• FIRSTk: (N U S)* → Part(S*)


• FIRSTk(a) = {u  S* | (a =*> ux, |u| = k)
sau (a =*> u, |u| < k) }

11/21/2023 2
FOLLOWk

FOLLOWk: (N U S)* → Part(S*)


FOLLOWk(a) = {u  S* | S=*>gab, u  FIRSTk(b)}

11/21/2023 3
Operatia k
Fie L1, L2 – 2 limbaje peste S
L1 k L2 = {w | $ x  L1, y  L2 astfel incat:
fie: |w| = k si $ z: xy = wz
fie: |w| < k si xy = w
}

Exercitii: L1 = {a, ab, abb, abbb, …}


L2 = {c, cc, ccc, cccc, …}
L1 3 L2 = …
L1 1 L2 = …
11/21/2023 4
Determinarea lui FIRST1
• pentru fiecare A  N:
F0(A) = {a  S | A→aa  P} U {e | A → e}
sf.pentru
i =0
• repeta
i = i+1
pentru fiecare A  N:
Fi(A) ={aS U{e}| A→X1…Xk , a Fi-1(X1) 1 …1 Fi-1(Xk)}
sf. pentru
pana cand Fi=Fi-1,  A  N
• FIRST1 = Fi
Obs:
 a  S : FIRST1(a) = {a}
 A  N: FIRST1(A) se determina pe baza reg. productie: A → …
11/21/2023 5
FOLLOW1
• FOLL (S) = {$}
FOLL (X) = F (X<>S)
• repeta
pentru fiecare B: A → a B b executa
FOLL (B) = FOLL (B) U (FIRST1(b) – {e})
Daca e  FIRST1(b) atunci
FOLL (B) = FOLL (B) U FOLL (A)
sf. daca
sf. pentru
pana cand FOLL nu se mai modifica
FOLLOW1 = FOLL
11/21/2023 6
Proprietati:
FIRST1(ab) = FIRST1(a) 1 FIRST1(b)
FIRST1(X1…Xn) = … ?

• A→a
FIRST1(A)  FIRST1(a)

• A→aXb
(FIRST1(b) – {e})  FOLLOW1(X)

• A→aX
FOLLOW1(A)  FOLLOW1(X)

[… ]
11/21/2023 7
Exercitii: FIRST1 si FOLLOW1
Problema:
• determinati FIRST1 si FOLLOW1 pentru toate terminalele si
neterminalele gramaticii cu regulile de productie:

S → BA (1)
A → +BA (2)
A→e (3)
B → DC (4)
C → *DC (5)
C→e (6)
D → (S) (7)
D→a (8)

11/21/2023 8
Gramatici LL(k)
• analizoare LL(k)
- analiza sintactica descendenta
- secv. de intrare este citita de la stanga spre dreapta
- se folosesc derivari de stanga

11/21/2023 9
Gramatici LL(k)
• G = (N, S, P, S)
? w=a1a2…an  L(G)
S =>st … =>st a1a2…ai A a
(derivari de stanga)
• LL(k) : alegerea r.p. pentru a-l retranscrie pe A este
unic determinata de: ai+1ai+2…ai+k
• terminologie:
– parte inchisa: a1a2…ai
– predictia (de lungime k): ai+1ai+2…ai+k
– simbol de retranscris: A
11/21/2023 10
Gramatici LL(k)
Definitie:
G = (N, S, P, S) este LL(K):
• Daca:
– S =*>st wAa =>st w b a =*> w x
– S =*>st wAa =>st w g a =*> w y
– FIRSTk(x) = FIRSTk(y)
• atunci:
b=g

11/21/2023 11
k=1

11/21/2023 12
Gramatici LL(1)
• ? w=a1a2…aiai+1 … an  L(G)
S =>st … =>st a1a2…ai A a
• LL(1): rescrierea lui A este unic determin. de ai+1

De exemplu:
Aleg: atunci cand:
A→g ai+1  FIRST1(g)
A→e ai+1  FOLLOW1 (A)
A→d (=*>e) ai+1  FOLLOW1 (A)
11/21/2023 13
Gramatici LL(1)
Teorema:
G – este de tip LL(1)
ddaca:
AN
A→a1| a2| a3| ... | am
• FIRST1(ai)  FIRST1(aj) = F , i<>j
• daca $ i a.i. ai =*> e atunci: e  FIRST1(ai)
FIRST1(aj)  FOLLOW1 (A) = F , i<>j
11/21/2023 14
Analiza sintactica LL(1)
• se construieste tabelul de analiza LL(1)
– alegerea lui A → ai este indicata in tabel
• analizorul sintactic LL(1)
~ modelare ca un automat

Conventie:
$ : la orice cuvant din limbaj se adauga $:
marcator de sfarsit de cuvant
Observatie:
O gramatica este de tip LL(1) ddaca tabelul de analiza nu contine conflicte (nu
exista mai mult de o valoare intr-o celula din tabel)
11/21/2023 15
Tabelul de analiza LL(1)
indica actiunea posibila la un moment dat
• coloane: S U {$}
• linii: N U S U {$}
• celula => (membrul drept al reg.prod , nr. reg.prod.)

11/21/2023 16
Tabelul de analiza LL(1)
M(X,a) =
– (a,i) daca X → a  P, a  FIRST1(a)
X → a – a i-a regula de productie
– (a,i) daca e  FIRST1(a), a  FOLLOW1(X)
X → a – a i-a regula de productie
– pop X=a
– acc X = $, a = $
– err in toate celelalte cazuri

11/21/2023 17
Analizorul LL(1)
• Automat: (a,b,P)
– banda de intrare: a (stiva de intrare)
– stiva b (stiva de lucru)
– banda de iesire P => sirul regulilor de productie
• config. initiala: (w$, S$, e)
• config. finala: ($, $, P )
• tranzitii
– push (ax$, Ab, P)├─ (ax$,ab,Pi) dc.: M(A,a) = (a,i)
– pop (ax$, ab, P) ├─ (x$, b, P)
– acc ($, $, P) ├─ acc
– err in celelalte cazuri
11/21/2023 18
Transformari echivalente
• => gram. LL(1) echiv. ?
• factorizare la stanga

11/21/2023 19
Gramatici LR(k)

• analizoare LR(k)
- analiza sintactica ascendenta
- secv. de intrare este citita de la stanga spre dreapta
- se folosesc derivari de dreapta
metoda: deplasare - reducere

11/28/2023 1
Analiza sintactica ascendenta
Exemplu:
Cum “arata” analiza sintactica ascendenta
pentru gramatica:

S → AB (1)
A→a (2)
B→b (3)
si intrarea: ab ?

11/28/2023 2
Gramatica LR(K)
Analizoarele sintactice LR(k) lucreaza cu
gramatica imbogatita:
G’ = ( N U {S’},  , P U { S’ -> S} , S’)
(S’  N)
pentru a evita ca simbolul de start sa apara in
membrul drept al unei reguli de productie.

11/28/2023 3
Gramatica LR(K)
O gramatica G = ( N ,  , P, S)
este de tip LR(k) pentru k>=0
ddaca din:
– S' =*>dr a A w =>dr a b w
– S' =*>dr g B x =>dr a b y
– FIRSTk(w) = FIRSTk(y)
rezulta ca:
– A=B
– x =y
– a=g
11/28/2023 4
Gramatici LR(K) - terminologie
Prefix viabil
Fie: S =*>dr a A w =>dr a b w
Orice prefix al lui ab se numeste prefix viabil
Element de analiza LR(k)
se defineste ca fiind: [A→a.b, u]
unde A→ab  P si u   k u-predictie

Element de analiza valid


[A→a.b, u] valid pentru prefixul viabil ga daca:
– S =*>dr g A w =>dr g a b w
– u = FIRSTk(w)
11/28/2023 5
Analizor sintactic LR(K)

Vom studia: Pasi in analiza LR(k):


• LR(0) • gramatica imbogatita
• SLR • constructia colectiei canonice
• LR(1) • constructia tabelului de analiza
• LALR • analiza:  automat

Vom lucra astfel:


la multimea cuv. de analizat se adauga la sfarsit $
$ - marcator de sfarsit de cuvant

11/28/2023 6
Colectia canonica LR(K)
C = {Ii - elementele de analiza pentru un prefix viabil}
• in I0 avem un prim element de analiza
• am cel putin un element in Ij (pentru fiecare)
=> adaug altele: functia Closure
• am o multime Ij (pentru fiecare)
=> construiesc multimile goto(Ii,X)

Observatie: Ii corespunde unei stari a automatului

Notatie: E – multimea elementelor de analiza

11/28/2023 7
Constructia colectiei canonice LR(k)
C = {Ii-elementele de analiza pentru un prefix viabil}
in I0 avem: [S’ → .S , …]

• I0 = Closure ([S’ → .S , …])


• C = { I0 }
• repeta
pentru toti Ii din C , X(N U ) executa
C = C U goto (Ii,X)
sf. pentru
pana cand C nu se mai modifica
11/28/2023 8
K=0: LR(0)

11/28/2023 9
Gramatica imbogatita
• se adauga S’
– nou simbol de start
– S’→S

Colectia canonica:
• In I0 avem: [ S’ → .S ]
• …

11/28/2023 10
Functia Closure LR(0)

Notam: E – multimea elementelor de analiza

• Closure : Part(E) → Part(E)


• Fie: e  E
daca e = [A → a . Bb]
atunci  B→ d  P: [B → . d]  Closure (e)

11/28/2023 11
Functia goto LR(0)

• goto : Part(E) x (N U ) → Part(E)


• goto(I,X) = Closure({[A→aX.b] | [A→a.Xb]  I})

11/28/2023 12
Tabelul de analiza LR(0)

11/28/2023 13
Tabelul de analiza LR(0)
T(Ii, actiune) =
– s (shift, deplasare)
daca: [A→a.b]  Ii , b <>e
si: T(Ii, X) = Ij, daca Ij = goto(Ii,X)
– L (reducere cu r.p. nr. L)
daca [A→a.]  Ii
A→a  P : regula de prod. cu numarul L
si: T(Ii, X) nu se completeaza
– acc daca: [S’ → S.]  Ii
Toate celelalte cazuri se considera eroare .
11/28/2023 14
Automatul LR(0) – model matematic
• configuratie:
(a,b,P)
(stiva_de_lucru, banda_de_intrare, banda_de_iesire)
• pe stiva: prefixe viabile, stari ale analizorului

• config. initiala: ($0,w$, e)


• config. finala: ($0S Iacc , $, P)

11/28/2023 15
Automatul LR(0) – model matematic
Tranzitii
• deplasare:
($ g sk , ai..an$ , P) ├─ ($g skaism , ai+1…an$ , P)
daca: T(sk,actiune) = s si T(sk,ai) = sm
• reducere:
($ g sp-1Xpsp… Xksk, ai..an$,P)├─ ($gsp-1A sm, ai…an$, LP)
daca: T(sk,action) = L
si: A → Xp… Xk – r.p. cu nr. L
T(sp-1, actiune) = s
T(sp-1, A) = sm

• acceptare: ( $ 0S sacc , $ , P ) ├─ acc.


• eroare: orice alta situatie
11/28/2023 16
Gramatica LR(0)
O gramatica este LR(0)
ddaca tabelul de analiza nu contine conflicte.

Gramatica data prin urmatoarele r.p. este LR(0) ?

S→ Ax
S→ By
A→ a
B→ a
11/28/2023 17
K=1: SLR, LR(1), LALR

11/28/2023 18
Analiza sintactica SLR
• SLR = Simple LR
• SLR tine cont de
• element de analiza SLR: predictie numai
[A→a.b, u] pentru reducere
u = FOLLOW1(A)
|u| =1

• constructia colectiei canonice (~LR(0))


– [A→a.b, u] , u = FOLLOW1(A)

11/28/2023 19
Analiza sintactica SLR
• constructia tabelului de analiza SLR
– actiunea de reducere depinde de predictia u
=>reducerea va avea o coloana pentru fiecare a  
tabelul: linii: elementele colectiei canonice
coloane: N U  U {$}
celula: sstare,rnr.r.p, acc
• analizorul ~ analizorul pt. LR(0)
automat: configuratii si tranzitii

11/28/2023 20
Analiza sintactica SLR

In tabelul de analiza SLR vom avea:

actiune: reducere + deplasare


(goto)
X   U {$} XNU

linii: elementele colectiei canonice


coloane: N U  U {$}

11/28/2023 21
Gramatica SLR
O gramatica este SLR
ddaca tabelul de analiza nu contine conflicte.

Gramatica data prin urmatoarele r.p. este SLR ?

S →A 1
S → xb 2
A → aAb 3
A →B 4
B →x 5
11/28/2023 22
• Gramatica data prin urmatoarele r.p. este SLR ?

S →A 1
S → xb 2
A → aAb 3
A →B 4
B →x 5

11/28/2023 23
Analizor sintactic LR(1)

• imbogatirea gramaticii
• constructia colectiei canonice
element de analiza LR(1):
– [A→a.b, u], |u| =1
• constructia tabelului de analiza
• analiza: automat

11/28/2023 24
Colectia canonica LR(1)
• elem. initial
[S’ → .S , $]
• Closure
[A → a.Bb, a] =>[B →.g, b]Closure([A→a.Bb, a])
B→g  b  FIRST1(ba)
• goto
goto (I,X) =
Closure ({[A→aX.b,a] | [A→a.Xb,a] I })

11/28/2023 25
Tabelul LR(1)

11/28/2023 26
Construirea tab. de analiza LR(1)
• [A→a.Xb,b]  Ii : goto (Ii,X) = I j <= functia goto
action(Ii,X) = sj
• [A→a. , a]  Ii action(Ii,a) = rL
L – nr. reg. de productie: A → a
A <> S’
• [S’ → S., $]  Ii action(Ii,$) = acc

Obs: o gram. este LR(…) daca tabelul de analiza nu


contine conflicte; si reciproc
11/28/2023 27
Analizorul LR(1)

pe baza tabelului de analiza


 similar LR(0), SLR

11/28/2023 28
Analizor sintactic LALR
• [A → a.b , a ]
nucleu

• colectia canonica LR(1)


• fuzioneaza elementele de analiza cu nuclee identice
si care nu creeaza conflicte
• predictia: reuniunea predictiilor

• tabelul LALR & analiza : similar LR(1)


11/28/2023 29
LR (1 –uri)
• Conflict:
[ A → a1.aa2 , u ] deplasare-reducere
[ B → b1. , a ]

[ A → a1. , a ] reducere-reducere
[ B → b1. , a ]

11/28/2023 30
.

Vezi si resursa bibliografica:

S. MOTOGNA
Metode de proiectare a compilatoarelor, 2006

11/28/2023 31
Analiza LR(1)
S’ → S 0
S →A 1
S → xb 2
A → aAb 3
A →B 4
B →x 5

12/7/2020 1
12/7/2020 2
12/7/2020 3
Analiza LALR

12/7/2020 4
12/7/2020 5
12/7/2020 6
12/7/2020 7
descendent ascendent

cu reveniri descendent cu ascendent cu


/ recursiv reveniri reveniri

liniar LL(k) LR(k)

Analizoare sintactice
12/1/2021 1
LL(k)
• L: “Left-to-right” (scaneaza intrarea)
• L: “Left-most derivation”
• k simboluri de lookahead descendent
~ dezvoltare in pre-ordine a arborelui de analiza sintactica

LR(k)
• L: Scaneaza intrarea “Left-to-right”
• R: “Right-most derivation” ascendent
• k simboluri de lookahead
~ traversare in post-ordine a arborelui de analiza sintactica

LL vs LR
12/1/2021 2
Clase de limbaje si relatia dintre ele
12/1/2021 3
Gramatici si relatii de precedenta

• Gramatici de precedenta simpla

 analiza sintactica ascendenta, determinista


 foloseste actiuni de tipul deplasare-reducere
Se folosesc niste relatii numite relatii de precedenta pentru a
depista limita dreapta si a celei stanga pentru a face o reducere
 automatul este similar cu atomatul LR

12/5/2023 1
Gramatici de precedenta simpla
Definitie:
gramatica de precedenta simpla
este o gramatica independenta de context proprie
(inclusiv -independenta)
unic invertibila:
• nu exista 2 reguli de productie cu acelasi membru drept
• intre oricare 2 simboluri exista cel mult o relatie de precedenta

12/5/2023 2
Gramatici de precedenta simpla
Relatii de precedenta Wirth-Weber:

Adevarat
sau fals?

12/5/2023 3
Gramatici de precedenta simpla

Exemplu: S a b c $
S → aSSb S = . <. = . <.
S→c
? accb L(G) a = . <. <.
b .> .> .> .>

c .> .> .> .>

$ <. <.

Problema este programata a fi rezolvata complet la seminar.


12/5/2023 4
bibliografie:
Motogna, cap. 4.5

G – gramatica de atribute
G = (N, , P, S) – gram. independenta de context
• A = UX  N U  A (X)
– fiecarui simbol al gramaticii
i se asociaza 0 sau mai multe atribute
: multime finita de atribute
• R = Up  P R(p)
– fiecarei reguli de productie i se asociaza
o multime finita de expresii ale atributelor
asociate simbolurilor regulii de productie
=> reguli de evaluare ale atributelor
12/12/2023 1
Atribute
asocierile atribut - valoare
sunt definite numai peste o “analiza sintactica”
un arbore de derivare

Evaluator de atribute
• calculeaza valori & propaga valorile calculate
• traverseaza arborele de derivare

• strategie de traversare a arborelui


si propagare a valorilor
.
12/12/2023 2
Evaluarea atributelor

Dandu-se o gram. de atribute, ce se intampla daca exista arbori de


derivare pentru care graful este circular?
 ! restrictionari pt. regulile de calcul ale atributelor

Dacă un atribut b depinde de un alt atribut c, atunci regula semantică


pentru calculul atributului b trebuie să fie evaluată după regula
semantică care îl produce pe c
 Graful de dependenta (sortare topologica)
12/12/2023 3
Evaluarea atributelor
Metode de evaluare
• metode bazate pe arborele de derivare
determina ordinea de evaluare
pe baza sortarii topologice a grafului de dependenta
construit pentru arborele de derivare
pentru fiecare secventa de intrare
• metode bazate pe reguli
ordinea de evaluare este determinata / fixata
la nivelul la care se definesc regulile semantice
• metode bazate pe o ordine pre-fixata
ordinea de evaluare este fixata si regulile semantice trebuie
definite astfel incat sa respecte ordinea data

11/7/2013 4
Atribute
Fie: regulile de evaluare a atributelor
asociate urmatoarei reguli de productie:
A  X1... Xk

• atribut sintetizat:
 un atribut al lui A
 regula de evaluare atribuie valoare atributului lui A

• atribut mostenit:
 atribut al lui Xi
 regula de evaluare atribuie valoare atributului lui Xi
El depinde de valorile parintilor si fratilor.

12/12/2023 5
Gramatica S-atributata
Def:
exista doar atribute sintetizate
si acestea depind de valorile atributelor copiilor

Evaluarea atributelor
– parcurgere "in sus" a arborelui de analiza sintact.
 analizor sintactic ascendent

12/12/2023 6
Gramatica L-atributata
Def:
Pentru orice regula de productie: A-> X1 X2 … Xn
– un atribut mostenit a lui Xi depinde de atribute mostenite ale lui A si de
atribute ale lui X1, X2, …, Xi-1
– orice atribut sintetizat al lui A nu depinde de alte atribute sintetizate ale lui A

Evaluarea atributelor
 in stransa legatura cu parcurgerea arborelui de derivare

Subalg. viziteaza(A)
pentru fiecare descendent Xi : (X1 , X2, …, Xn)
evalueaza atributele mostenite ale lui Xi
viziteaza (Xi)
sf. pentru
evalueaza atributele sintetizate ale lui A
endSubalg.
12/12/2023 7
Gramatică de atribute (GA) GA, DDS
- gramatica independenta de context
- atribute + expresii ale atributelor in unele surse se
foloseste acelasi
Definiţii dirijate de sintaxă (DDS) termen
(EN: Syntax directed definition)
- gramatica independenta de context
- atribute + reguli de calcul ale atributelor
 pot avea efecte laterale
(apeluri de proceduri sau fragmente de program)
Scheme de traducere:
(EN: Syntax directed translation)
definitie orientata sintaxa
+ alte actiuni ex.: fragment de program
se execută atunci când este întâlnit în parcurgerea arborelui
EX: A -> α { print('x')} β
se va afişa caracterul 'x' după ce se vizitează subarborele α
şi înainte de traversarea subarborelui β.
12/12/2023 8
Gramatica de atribute. Exemplu

S -> A A.a = A.x

A0 -> A1 a A1.a = A0.a


A1.b = A1.y
A0.x = A1.x
A0.y = 1

A -> b A.y = A.a


A.x = 1

A -> bb A.x = A.b


A.y = 1

12/12/2023 9
Generarea codului intermediar

Cod intermediar cu trei adrese.


Exemple.

12/18/2023 1
Generarea codului intermediar
In urmatoarele exemple,
pentru generarea codului intermediar vom atributa gramatica
ce descrie structurile sintactice.

Vom folosi ca atribute:


 nume de variabile ( pt. expresii )
 cod ( cod cu trei adrese)
 nume de etichete

Vom folosi niste functii speciale


 newVarName - creeaza (nume de) variabile
( newTemp …)
 newLabel - creeaza nume de etichete
12/18/2023 2
Exemplu:

Fie secventa: a-b+c


E→ E + ID
E→ E - ID
O gramatica independenta de E→ ID
context, simplificata, care descrie
sintaxa expresiei artimetice date: ID → a
ID → b
ID → c

Vrem sa obtinem: codul cu trei adrese echivalent semantic


T1 := a - b
T2 := T1 + c

12/18/2023 3
E → E1+ID E.varn = newVarName()
E.cod = E1.cod ||
E.varn := E1.varn + ID.varn

E → E1 - ID E.varn = newVarName()
E.cod = E1.cod ||
E.varn := E1.varn - ID.varn

E → ID E.cod= “ ”
E.varn = ID.varn
ID → a ID.varn= a Gramatica
ID → b ID.varn= b atributata
ID12/18/2023
→c ID.varn= c 4
Exercitiu:
Dati o gramatica independenta de context (forma simplificata)
care descrie sintaxa expresiilor aritmetice , a.i.
a+b-c
sa fie un cuvant al gramaticii.
(Gramatica va respecta structurile lexicale, sintactice si semantice!)
a) atributati gramatica:
- introduceti (cel putin) atributul cod
cod - cod intermediar cu 3 adrese, reprezentare cvadruple
- definiti reg. evaluare pt. atributul cod
- folositi si alte atribute daca e nevoie
b) dati arborele de derivare
c) descrieti evaluarea atributului cod pentru exemplul dat

12/18/2023 5
Exercitiu:
Dati o gramatica independenta de context (forma simplificata)
care descrie sintaxa instructiunii if , a.i.
if a > b then max:=a else max:=b
este un cuvant al gramaticii.
(Gramatica va respecta structurile lexicale, sintactice si semantice!)
a) atributati gramatica:
- introduceti (cel putin) atributul cod
cod - cod intermediar cu 3 adrese, reprezentare cvadruple
- definiti reg. evaluare pt. atributul cod
- folositi si alte atribute daca e nevoie
b) dati arborele de derivare
c) descrieti evaluarea atributului cod pentru exemplul dat

12/18/2023 6
Exercitiu:

… similar pentru:
while a>=b do a:=a-b

12/18/2023 7
Compilator:
multi-limbaj,
multi-target .
(masina)

in stransa
legatura cu
separarea
fazelor

Sursa imagine: Wikipedia, 2016


12/19/2022 1
Exemple:

CIL - Common Intermediate Language


– Microsoft .Net
anterior cunoscut sub numele MSIL
(Microsoft Intermediate Language)

RTL - register transfer language


- GNU Compiler Collection
- multe alte compilatoare

12/19/2022 2
Codul intermediar
• limbaj intermediar:
– usor de transcris din arborele sintactic
– usor de translatat in cod masina
– proiectat inclusiv pt. a fi inteles/utilizat de oameni
– mai apropiat de limbajul procesorului decat limbajul
sursa
Reprezentari intermediare:
"intre" arborele de analiza sintactica si ASM
• high-level: mentine structura limbajului
(tinde sa fie)
• mid-level: independent de limbaj si masina
• low-level: dependent de masina
12/19/2022 3
Codul intermediar

• Arbore sintactic abstract


• Forma poloneza postfixata
• Cod intermediar cu 3 adrese
Reprezentari:
– cvadruple
– triplete
– triplete indirecte

12/19/2022 4
Arbore sintactic abstract
“Abstract syntax trees”
Alte denumiri (intalnite in literatura de specialitate, in lb/ romana)
arbore de sintaxa abstracta, arbore sintactic

 reprezentare apropiata de structura sintactica a programelor


 nu este arborele de derivare, ci o varianta simplificata

Proprietati:
• nodurile interioare sunt operatori
• descendentii unui nod sint operanzii lui
 fiecare subarbore formeaza o "unitate logica"
12/19/2022 5
Arbore sintactic abstract
Exemplu: id1:=id2*id3+id4

12/19/2022 6
Arbore sintactic abstract
Exercitii propuse:

Descrieti arborele sintactic abstract pentru urmatoarele


instructiuni:

• if id1>id2 then id3:=id2


else id3:=id1
• while id1>id2 do
id1:=id2-id1

12/19/2022 7
Forma poloneza
• aceeasi idee ca si la:
forma poloneza postfixata pentru expr. aritmetice
Exemplu:
id1 := id2 * id3 + id4 => id1 id2 id3 * id4 + :=

Proprietate:
• operatorii apar in ordinea in care se executa operatiile
Avantaj:
evaluarea se face parcurgand o singura data expresia si
executand operatiile tinand cont de aritatea lor

12/19/2022 8
Cod intermediar cu 3 adrese
• secventa de instructiuni cu forma generala:
<rezultat> := <arg1> <operator> <arg2>
• operatii:
– binare
– unare – se reprezinta doar un operand
• reprezentare
– cvadruple
– triplete Pentru triplete si triplete indirecte
vom lucra numai cu exemple cu

– triplete indirecte atribuiri si expresii aritmetice.

12/19/2022 9
3 adrese – reprezentare cvadruple
• structura tip inregistrare ce contine 4 campuri:
operator arg1 arg2 rez

Exemplu:
operator arg1 arg2 rez
A := B*(C+D) … … … …
+ C D T1
* B T1 T2
:= T2 A

12/19/2022 10
3 adrese – reprezentare triplete
• structura tip inregistrare ce contine 3 campuri:
operator arg1 arg2

• se renunta la introducerea numelor temporare ce


stocheza rezultate intermediare
• se considera ca instructiunea care calculeaza o
valoare temporara retine acea valoare

12/19/2022 11
3 adrese – reprezentare triplete
Exemplu:
A := B*(C+D)

operator arg1 arg2


… … … …
(51) + C D
(52) * B (51)
(53) := A (52)

12/19/2022 12
3 adrese – reprez. triplete indirecte

• codul contine instructiunile intr-o ordine oarecare


• pentru a obtine ordinea in care se executa operatiile,
se foloseste un tabel suplimentar cu 2 campuri:

nr. de ordine a nr. operatiei


operatiei propriu-zise

12/19/2022 13
3 adrese – reprez. triplete indirecte
nr. de ordine nr. operatiei
a operatiei propriu-zise

51 131
52 132

53 133 operator arg1 arg2


… … … …
(131) + C D
(132) * B (131)
(133) := A (132)
12/19/2022 14
Cvadruple. Conventii cu care vom lucra noi
• operanzi: constanta numerica
valoarea unei variabile
• operanzi speciali
– @ adresa variabilei
– ^ variabila de la adresa indicata de valoarea variabilei
• operatii
– aritmetice binare: +, * , …
– aritmetice unare: -
– de atribuire (copiere): :=
– relatii <,>,…
– salt neconditionat goto et
– salt conditionat g<operlogic> exp1 exp2 et
12/19/2022 15
Optimizare cod intermediar
rearanjarea codului intermediar in vederea obtinerii
unui program mai eficient
optimizari
Exemple: locale
1. realizarea unor calcule in mom. compilarii
2. eliminarea operatiilor redundante si a expresiilor
comune
3. eliminarea codului inaccesibil (secvente moarte)
optimizarea
4. scurtcircuitarea expresiilor logice ciclurilor
5. factorizarea invariantilor de cicluri
12/19/2022 16
Modele de calcul
Masini de calcul abstracte idealizate, simplificate
organizarea masinii
– actiuni (instructiuni) + valorile cu care operam (operanzii)

Masina cu registri
– registri: valorile cu care operam
– instructiuni:
operanzii: registri de intrare , registru de iesire

Masina cu stiva calculator de tip stiva


– operanzii – in stiva
– instructiuni: opereaza asupra varfului stivei

12/18/2023 1
Masina cu registri
Exemplu:
Fie expresia aritmetica
A+B

Codul pentru masina cu registri echivalent expresiei aritmetice date este:


load A, r0
load B, r1
add r0, r1, r2

Pentru simplificare, noi vom folosi doar exemple de tipul:


Dandu-se o expresie aritmetica
cu operatorii: … (add, sub, mul, div), stim sa determinam:
codul pentru masina cu registri

Operatorii pentru exemplele cu care vom lucra:


load, add, sub, mul, div, store

12/18/2023 2
Masina cu stiva
Modelul se bazeaza pe faptul ca orice expresie poate fi scrisa in
forma poloneza postfixata.
Pentru simplificare, noi vom
folosi doar exemple de tipul:

Exemplu: Dandu-se o expresie aritmetica,


Fie expresia aritmetica stim sa determinam:
B+C-D a) forma poloneza postfixata
Forma poloneza postfixata este b) codul pentru masina cu stiva
BC+D-
Codul pentru masina cu stiva echivalent expresiei aritmetice date este:
push B
push C
add
push D In exemplele cu care vom lucra vom
sub considera o masina cu stiva si 6 operatii:
push, pop, add, sub, mul, div

12/18/2023 3
Masina cu stiva / masina cu registri
Exemplu: 2+3
• Masina cu stiva
Push 2
Push 3
Add

• Masina cu registri
Load 2, r0
Load 3, r1
Add r0, r1, r2
12/18/2023 4
Alte modele de calcul
+ combinatii
• Masina cu acumulator
acumulator : un registru special
- operand implicit
- rezultate stocate in acumulator
+…
• Masina cu acumulator si stiva
stiva + acumulator (registru special)

… …
12/18/2023 5
Java bytecode :
exemplu

12/18/2023 6
Idei execitii atributare gramatici
– cod intermediar
.

1/3/2024 1
Exercitiu:
Dati o gramatica independenta de context (forma simplificata)
care descrie sintaxa instructiunii if , a.i.
if a > b then max:=a else max:=b
este un cuvant al gramaticii.
(Gramatica va respecta structurile lexicale, sintactice si semantice!)
a) atributati gramatica:
- introduceti (cel putin) atributul cod
cod - cod intermediar cu 3 adrese, reprezentare cvadruple
- definiti reg. evaluare pt. atributul cod
- folositi si alte atribute daca e nevoie
b) dati arborele de derivare
c) descrieti evaluarea atributului cod pentru exemplul dat
1/3/2024 2
2
Idee rezolvare – reguli de evaluare a atributelor,
asociate regulii de productie ce descrie sintaxa instructiunii if
Fie sintaxa instr. if-then-else descrisa astfel:
S→if E then S1 else S2
reguli de evaluare pt. atributului cod:
S.et_false = newLabel ()
S.et_after = newLabel()
S.cod = E.cod ||
g= , E.varn , false , S.et_false ||
S1.cod ||
goto S.et_after ||
S.et_false ':' ||
S2.cod ||
1/3/2024
S.et_after ':' 3
3
Exercitiu:

… similar pentru:
while a>=b do a:=a-b

1/3/2024 4
4
Idee rezolvare – reguli de evaluare a atributelor, asociate
regulii de productie ce descrie sintaxa instructiunii while

S→ while E do S1
S.et_begin = newLabel ()
S.et_after = newLabel()
S.cod = S.et_begin ':' ||
E.cod ||
g=, E.var, false, S.et_after ||
S1.cod ||
goto S.et_begin ||
1/3/2024
S.et_after ':' 5
5
• Recapitulare, Exemple, Aplicatii
Automate
• Translatoare
• Masini Turing

1/9/2024
Automat finit: model fizic
Automat finit: model matematic
• Un automat finit este un ansamblu
M = (Q, , , q0, F) : AF cu numar
• Q – alfabetul starilor minim de stari

•  – alfabet de intrare

•  : Qx → P(Q) functie de tranzitie


• q0  Q - stare initialã
• F  Q multimea stãrilor finale
Automat push-down (APD)

Model fizic

1/9/2024
Automat push-down (APD)
M = (Q, , G, , qo,Zo, F)
• Q alfabetul stărilor;
•  alfabetul de intrare;
• G alfabetul memoriei stivă;
• qoQ stare iniţială;
• ZoG simbolul de start al memoriei stivă;
• F Q mulţimea stărilor finale;
• :Qx( U {e})xGP (QxG*) funcţia de tranziţie
– are ca valori submulţimi finite din QxG* (posibil
multimea vida)
1/9/2024
Transformarea acceptarii dupa criteriul stivei vide
in acceptare dupa criteriul starii finale
Fie: M – APD care accepta L dupa criteriul stivei vide
Dorim sa construim M’ care accepta L dupa criteriul starii finale
M’ – contine tot ce contine M , dar mai adaugam:
• qnou o noua stare initiala
• qf o noua starea finala
• Znou noul simbol initial al stivei
Adaugam si tranzitiile corespunzatoare noilor stari, asa cum este schitat mai jos:

In mod analog se poate face transformarea


acceptarii dupa criteriul starii finale in
acceptare dupa criteriul stivei vide.
1/9/2024
Translator finit
M = (Q, , D, , qo, F)
• Q alfabetul stărilor;
•  alfabetul de intrare;
• D alfabetul de iesire;
• qoQ stare iniţială;
• F Q mulţimea stărilor finale;
• :Qx( U {e}) P0 (Q x D*)
multimea partilor finite

1/9/2024
model fizic
Translator
finit

1/9/2024
Translator finit
Exemplu:
M = ( Q, , D, , qo, F )
M = ({q0, q1}, {a}, {b} ,  , q0 , {q1} )
(q0, a) = {q1, {b}}
d(q1, e) = {q1, {b}}

Translatarea definita de M:
T(M)={(x,y)| x* , yD*, (q0,x,e) |-* (q,e,y), qF)

1/9/2024
Alte automate
In literatura mai gasim:
(intre multe alte tipuri)

• Automatele Mealy: la fiecare


tranzitie se produce un simbol de
ieşire.

• Automatele Moore: fiecarei stari


(intrare intr-o stare) i se asociaza un
simbol de ieşire.

1/9/2024
Translator push-down
M = (Q,  , G, D, , qo, Z0, F)
• Q alfabetul stărilor;
•  alfabetul de intrare;
• G alfabetul memoriei stivă;
• D alfabetul de iesire;
• qoQ stare iniţială;
• ZoG simbolul de start al memoriei stivă;
• F Q mulţimea stărilor finale;
• : Q x ( U {e}) x G P0 (Q x G*x D*)
1/9/2024
multimea partilor finite
Translator model fizic
push-down

1/9/2024
Translator push-down
M = (Q,  , G, D, , qo, Z0, F)

Q = {q}  (q, a, E) = {(q, e, a)}


 = {a,+,*}  (q, +, E) = {(q, EE+, e)}
G = {E, +, *}  (q, *, E) = {(q, EE*, e)}
D = {a, +, *}  (q, e, +) = {(q, e, +)}
qo=q  (q, e, *) = {(q, e, *)}
Zo=E

Considerand criteriul stivei vide,


descrieti translatarea pe care acesta o defineste .
1/9/2024
Vezi:
… am lucrat LL(1)
si cu alte LR(*)
translatoare

1/9/2024
Ne reamintim: Analizorul LL(1)
• Automat: (a,b,P)
– banda de intrare: a
– stiva b (stiva de lucru)
– banda de iesire P => sirul regulilor de productie
• config. initiala: (w$, S$, e)
• config. finala: ($, $, P )
• tranzitii
– push (ax$, Ab, P)├─ (ax$,ab,Pi) dc.: M(A,a) = (a,i)
– pop (ax$, ab, P) ├─ (x$, b, P)
– acc ($, $, P) ├─ acc
– err in celelalte cazuri
1/9/2024
Automatul LL(1)
ca translator push-down (modificat)
[Moldovan]

Limbajul acceptat
se defineste dupa
criteriul stivei vide.

1/9/2024
Masini Turing
• infinita
banda de intrare • finita la stanga
•…

cap citire/scriere

UC

1/9/2024
Masini Turing
O miscare a masinii Turing consta din:
• se schimba starea
• se inlocuieste simbolul curent de pe banda de intrare
• capul citire/scriere se muta cu o pozitie la stanga sau
la dreapta

1/9/2024
Masina Turing cu banda infinita
O masina Turing este: M = (Q, , G, , q0, #, F)
• Q – multime finita de stari
• G – multimea simbolurilor benzii
• # - un simbol din G, numit simbolul blanc
•  – o submultime a lui G -{#}
•  – este functia de tranzitie
: Q x G → P(Q x G x {L,R})
• q0 – starea initiala
• F  Q – multimea starilor finale
1/9/2024
Masina Turing cu banda infinita
• configuratie
a1 q a2 a1a2  G*, separate de capul de citire
pana la cel mai din stanga/dreapta simbol ne-blank
• tranzitie
(p,Y,L)  (q,Xi)
X1X2…Xi-1qXi Xi+1…Xn├─X1X2 … Xi-2 p Xi-1YXi+1…Xn
(p,Y,R)  (q,Xi)
X1X2…Xi-1qXi Xi+1…Xn├─X1X2 … Xi-1Y p Xi+1…Xn

• limbaj acceptat
{w  * | q0w ├─ a1qa2 , q  F, a1a2  G*}
1/9/2024
Exemplu: masina Turing
Functia de tranzitie 0011 ?

 G-
0 1 X Y #
q0 (q1,X,R) (q3,Y,R) 0
q1 (q1,0,R) (q2,Y,L) (q1,Y,R) 0
q2 (q2,0,L) (q0,X,R) (q2,Y,L) 0
q3 (q3,Y,R) (q4,# ,R) 0
q4 1
1/9/2024
Masini Turing
• Masina Turing cu o singura banda
versus Masina Turing cu mai multe benzi
O mașină Turing cu k benzi
nu este mai puternică decât o mașină Turing standard
• Mașină Turing deterministă (MTD)
versus mașină Turing nedeterministă (MTND)
Cele două sunt computațional echivalente,
adică orice MTND se poate transforma într-o MTD
(și invers).

1/9/2024
Masini Turing
Teza lui Church
• Logicianul Alonzo Church a emis ipoteza că maşina Turing este
modelul cel mai general de calcul care poate fi propus.
 maşina Turing este la fel de puternică ca orice alt model de calcul
 nu înseamnă că poate calcula la fel de repede ca orice alt model de calcul, ci că
poate calcula aceleaşi lucruri
• Acest enunţ nu este demonstrabil în sens matematic.

Dacă avem un model de calcul, putem defini precis ce înţelegem prin complexitate:
• Timpul de calcul pentru un şir dat la intrare: este numărul de mutări făcut de maşina
Turing înainte de a intra în starea ``terminat'';
• Spaţiul consumat pentru un şir de intrare: este numărul de căsuţe de pe bandă pe
care algoritmul le foloseşte în timpul execuţiei sale.

1/9/2024
Potrivirea sirurilor de caractere
(pattern matching) folosind AF
Exercitiu:
Gasiti subsecventa:
ACACAGA
in textul:
ACACACAGA

1/9/2024
Gramatici • Recapitulare, Exemple, Aplicatii

1/16/2024 1
Limbaje formale si tehnici de compilare

Limbaj formal Structura unui compilator

Limbaj regulare:
• gramatici regulare,
• automate finite,
• expresii regulare.

Limbaje independente de context:


• Gramatici independente de
context, automate push-down
• Gramatici speciale: LL(k), LR(k)

Gramatici de atribute

1/16/2024 2
Gramatica
O gramatica este un cvadruplu G = (N, S , P, S)
• N este un alfabet de simboluri neterminale
• S este un alfabet de simboluri terminale
• NS=f
• P  (N  S )* N (N  S )* x (N  S )*
P multime finitã (multimea regulilor de productie)
• S N (simbolul de start - simbolul initial)

Notatie:
(a , b ) P se noteaza: a  b
(a se înlocuieste cu b)

1/16/2024 3
• Gramatici de tip 0
nici o restrictie (suplimentara) referitoare la forma regulilor de productie
• Gramaticile de tip 1
dependente de context  gramatici monotone
( monotonic, non-contracting )
• Gramaticile de tip 2
gramatici independente de context
• Gramaticile de tip 3
gramatici regulare

1/16/2024 Clasificarea Chomsky 4


• Gramaticile monotona
–  a  b  P: |a| <= |b | a , b  (N  S )*
– caz special: S→ e poate  P In acest caz S nu apare în membrul
drept al nici unei reguli de productie.

• Gramatica dependenta de context


reguli de productie sunt de forma:
aAbagb AN
a , b, g  (N  S )* , g  e
– caz special: S→ e poate  P In acest caz S nu apare în membrul
drept al nici unei reguli de productie.

1/16/2024 Tipuri de gramatici 5


Transformarea gramaticilor monotone
in gramatici dependente de context
Ideea:
Pentru fiecare regula de productie de forma: X1 ... Xm → Y1 ... Yn ,( stim ca m>=n,)
introducem:

X1 X2 ... Xm-1 Xm → Z1 X2 ... Xm-1 Xm


Z1 X2 ... Xm-1 Xm → Z1 Z2 ... Xm-1 Xm

Z1 Z2 ... Xm-1 Xm → Z1 Z2 ... Zm-1 Xm
Z1 Z2 ... Zm-1 Xm → Z1 Z2 ... Zm-1 Zm Ym+1 ... Yn

Z1 Z2 ... Zm-1 Zm Ym+1 ... Yn → Y1 Z2 ... Zm-1 Zm Ym+1 ... Yn


Y1 Z2 ... Zm-1 Zm Ym+1 ... Yn → Y1 Y2 ... Zm-1 Zm Ym+1 ... Yn

Y1 Y2 ... Zm-1 Zm Ym+1 ... Yn → Y1 Y2 ... Ym-1 Zm Ym+1 ... Yn
Y1 Y2 ... Ym-1 Zm Ym+1 ... Yn → Y1 Y2 ... Ym-1 Ym Ym+1 ... Yn

• unde Zi – sunt neterminale nou introduse, distincte pentru fiecare regula de productie
1/16/2024 LFTC - Dana Lupsa 6
• Gramatica regulara:
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.

• Gramatica independenta de context:


reg. productie sunt de forma A a , A N, a  (N  S )*

1/16/2024 Tipuri de gramatici 7


Gramaticile regulare si liniare in diverse surse.
Gramatica regulara la dreapta Conventiile folosite in
cadrul acestui curs:
• A aB
vezi definitiile
• A b de pe slide-urile anterioare.
Discutie: unele surse accepta si: A→ e
alte surse nu accepta deloc e -productii
Gramatica regulara la stanga
• A B a
• A b …
Gramatica liniara la dreapta (gr.regulara la dreapta extinsa)
• A a1 a2 … an B
• A b1 b2 … bm …
Gramatica liniara la stanga (gr.regulara la dreapta extinsa)

Gramatica liniara:
• are cel mult un neterminal in membrul drept al regulii de productie

e.g.: S → aSb
1/16/2024 S → ab 8
Gramatici independente de context

Ne reamintim:
• gram. ε -independenta
• eliminarea regulilor de productie de redenumire
• forma normala Greibach
• forma normala Chomsky (FNC)

[…] si echivalente
1/16/2024 9
Forma normala Greibach
Gramatica in forma normala Greibach
• reg. prod. sunt de forma
• A a a unde a  (N U S )* si a S

• caz special:
S→ e poate  P
In acest caz S nu apare în membrul drept al nici unei reguli de productie.

1/16/2024 10
Forma normala Greibach
Teorema:
Pentru orice gramatica independenta de context
exista o gramatica in forma normala Greibach echivalenta.

Constructie:
Fie: gram. e –independenta, fara redenumiri
1. (similar cu algoritmul pt. eliminarea recursivitatii stanga)
• impunem o ordine asupra neterminalelor: N = {A1,A2,…,An}
si apoi modific r.p. a.i. sa nu existe Ai→Aja cu i<j
2. Pentru k = n-1 , … , 1
avem neterminalul Ak
pentru toate r.p. Ak  Aj a (k<j)
se inlocuiesc cu: Ak  ba ,
pentru toti b a.i. : Aj  b (in toate modurile posibile)
1/16/2024 11
Forma normala Chomsky
Gramatica in forma normala Chomsky

Regulile de productie sunt de forma:


• A BC
• A d unde A,B,C N si d S

caz special:
S→ e poate sa apara in multimea regulilor de productie,
dar in acest caz S nu apare în membrul drept al nici unei reguli de
productie.

1/16/2024 12
Forma normala Chomsky
Teorema:
Pentru orice gramatica independenta de context
exista o gramatica in forma normala Chomsky echivalenta

Constructie:
Fie: gram. e –independenta, fara redenumiri
Folosim transformari de forma:
A  X1X2 … Xn : A  X1Z1
Z1  X2Z2
Zn-2  Xn-1Xn
1/16/2024 13

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