Sunteți pe pagina 1din 142

Limbaje formale i

proiectarea
compilatoarelor
Prelegeri 30 ore
Seminare 14 ore
Laborator 16 ore
examen

Tema 1:Automate cu stri


finite (AFD)
Lecia 1
1. Introducere. Limbaje formale.
Implementarea limbajelor.
2. Analizor lexical. Expresii regulate.
3. Componentele unui AFD. Proiectarea
4. Componentele unui AFN.
Proiectarea.

Subiectul 1

Definiia 1. Limbajul reprezint un sistem de


semne, care permite modelarea unor stri de
lucruri ale lumii nconjurtoare (lumea reala,
realitatea).
Limbajele includ trei aspecte fundamentale:
1. Aspectul sintactic: sistem de reguli, care
asigura combinarea semnelor gramatica
limbajului.
2. Aspectul semantic: sistem de reguli, care
fixeaz raportul intre semn si lumea reala
influennd sistemul de reguli sintactice.
3. Aspectul pragmatic: sistem de reguli,care
definete contextul (modul) de utilizare a
limbajului.

Subiectul 1

Explicaie:
Folosind sistemele de reguli enunate mai sus
agentul (factorul activ: fiina umana, robot etc.) pot
enuna anumite clauze, propoziii privind starea de
lucruri din lumea real.
Coninutul acestor enunuri pot s corespund
strilor de lucruri referite i atunci ele sunt
calificate ca fiind adevrate sau pot fi n
contradicie cu strile referite i calificate drept
false.

*
Limbajele pot fi: 1)naturale, 2)formale.

Subiectul 1

Explicaie:
1) Limbajele naturale sunt bazate pe sisteme lingvistice, create de
evoluia speciei umane, de exemplu. Aceste sisteme sunt bazate pe
limbi scrise i vorbite. Entitile elementare (materiale) ale acestor
sisteme sunt considerate morfemele i, respectiv, fonemele. Ele
stau la baza conceptului de cuvnt - element discret care formeaz
obiectul regulilor sintactice ale limbajului.
2)
Limbajele formale sunt construite artificial pe baza unui
vocabular proiectat i orientat pe un anume domeniu abstractat din
lumea real - W numit si Univers.
*
Definiia 2. Totalitatea cuvintelor unui limbaj formeaz vocabularul
limbajului.
Explicaie:

Subiectul 1
Explicaie:
Materialul folosit la articularea cuvintelor sunt caracterele entiti
materiale concrete. Numrul caracterelor utilizate este finit, iar
mulimea de
caractere este numit, de obicei, alfabet. Pentru
articularea cuvintelor pe baza alfabetului ales pentru definirea
vocabularului limbajului sunt necesare trei operaii:
1. Concatenarea - alipirea caracterelor la dreapta sub forma unui
sir de caractere de lungime finita(numrul de caractere). irul de
caractere, obinut prin aplicarea repetata a operaiei de concatenare
uneori este numit i cuvnt. Prin extensiune, concatenarea poate
genera mulimi de iruri de caractere (cuvinte). Operaia de
concatenare poate fi redefinit pentru doua sau mai multe iruri de
caractere, de exemplu pq, sau pq.
2. Reuniunea mulimilor irurilor de caractere, care are sensul
obinuit din teoria mulimilor, de exemplu, P U Q sau P + Q, P|Q,
unde P si Q sunt mulimi de iruri de caractere.
.

Subiectul 1

3. Iteraia Clenee R*=R0+R1+ + Rn+,unde R2=RR,

R0={} mulimea cu irul vid etc. R* obinuta astfel este


mulimea tuturor irurilor de caractere cu lungime
arbitrara. Lungimea unui ir este numrul de caractere
utilizate la formarea irului. irul vid are lungimea 0.
Definiia 3. Mulimile irurilor de caractere astfel produse
sunt numite mulimi regulate.
Mulimile regulate constituie baza limbajelor formale
vocabularul lor.
Exemplu 1. Fie dat mulimea M={0,1,2,3,4,5,6,7,8,9}. S
se obin iteraia Clenee de gradele 0, 1, 2, 3. Este oare
mulimea M o mulime regulat.
2. Fie dat mulimea N={0, 1, 2, a, b, c}. S se proiecteze
formula pentru obinerea mulimii Idn mulimea
identificatorilor
peste mulimea N.

Subiectul 1

Definiia 4. Un limbaj L conine urmtoarele componente:


1. Vocabularul o mulime regulat construita pe baza
unui alfabet A finit.
2. Sintaxa un set finit, bine definit, de reguli sintactice.
3. Semantica un set finit, bine definit, de reguli de
interpretare semantic.
4. Universul o mulime de submulimi de valori care
formeaz baza regulilor de interpretare semantica.
Pe scurt definiia de mai sus poate fi simbolic scrisa astfel:
L=(V, SN, SM, U), unde V este vocabularul, SN- regulile
sintactice, SM regulile semantice si U este universul de
interpretare.
Definiia 4 definete att limbajele naturale, ct i limbajele
formale.
n continuare ne vor interesa doar limbajele de programare
o subclasa a limbajelor formale.
*

Subiectul 1

Limbajele de programare sunt limbaje formale elaborate


pentru a construi descrieri formale ale algoritmilor, urmnd
s fie executai la calculator. Conform definiiei 4 pentru a
defini un limbaj de programare trebuie de precizat:
vocabularul, regulile sintactice, regulile semantice i
universul.
Limbajele de programare sunt raportate la limbajul
calculatorului, deoarece exista un decalaj conceptual (de
abstractare) dintre universul unui limbaj de programare si
limbajul calculatorului.
Tez: Pentru a rula pe calculator algoritmii Universul
limbajului de programare trebuie redus la universul
limbajului calculatorului. Acest proces se numete
translatare.

Subiectul 1

Simbolic putem scrie:

M
L M ,unde
L este limbajul sursa, M reprezint limbajul
main (calculatorul). M super scris denot faptul
c procesul de translatare este scris n limbajul
main. Desigur, procesul este mult abstractizat. A
elabora un translator (proces de translatare) n
limbajul main este mult prea dificil. Exist
scheme eficiente de translatare cu implicarea mai
multor limbaje de programare, pentru care exist
deja translatoare.
Procesarea informaiei n procesul de translatare
poate avea loc n mai multe moduri: 1)compilare,
2)interpretare i 3) implementare hibrida.

Subiectul 1
1) Procesul de compilare (compilatorul) produce, pe baza
algoritmului descris in limbajul de programare L (programul sursa) un nou
program obiect, echivalent funcional cu programul sursa. Programul
obiect poate fi obinut direct n limbajul-maina i ulterior executat pe
calculator.
2) Procesul de interpretare nu produce programul obiect ca rezultat
al
procesrii programului sursa, ci execut programul surs n mod direct
pe calculator (UNIX, APL, LISP, JavaScript).
3) Procesul hibrid combina compilarea cu interpretarea (Perl, Java).

*
n fig. 1 este reprezentat schematic procesul de compilare. Sunt
reprezentate patru blocuri de procesare:
1.Analizorul lexical, care proceseaz
vocabularului limbajului de programare.
2.

lexemele

elemente

ale

Analizorul sintactic, care proceseaz frazele senteniale ale limbajului


conform regulilor sintactice gramaticii

Figura 1. Schema general de compilare

Progra
m
sursa

Analizor
lexical

Unitat
i
lexical
e

Arbor
e
deriva
re

Cod
interm
ediar

Cod
masin
a

Interfaa
utilizat
orului

Analizor
sintactic

Analizor
semantic

Generator

cod

Tabela
simboluri

Subiectul 1

3. Analizorul semantic, care proceseaz


semantica limbajului conform regulilor semantice.
4. Generatorul de cod, care genereaz programul
in limbajul main echivalent funcional
programului surs.
Fiecare dintre blocurile enumerate mai sus vor fi
prezentate in cadrul cursului in ordinea, in care
sunt etalate mai sus.
Sfritul subiectului 1

Subiectul 2
Analizorul lexical (scaner) proceseaz lexemele limbajului-sursa.
Lexemele limbajului formeaz vocabularul limbajului. Ele sunt
divizate pe clase tokenuri nite coduri interne ale compilatorului.
Exemple de tokenuri: identificator, constant, operaii-aritmetice,
relaii,cuvinte-cheie etc.
Exemple de lexeme: max1, -23.1E-3, +, >=, THEN etc.

*
La nivel lexical analizorul interpreteaz lexemele ca pe nite iruri de
caractere de lungime finit generate pe baza unui alfabet. Sunt trei
scopuri ale analizei:
1. Identificarea lexemului n irurile analizate.
2. Determinarea clasei lexemul tokenul.
3. Stocarea informaiei n Tabela de simboluri.
Soluionarea sarcinilor propuse mai sus se face pe baza Expresiilor
lingvistice regulate i a Teoriei automatelor cu stri finite
(ASF)

Subiectul 2

Expresiile regulate permit descrierea lexemelor care


formeaz limbajul de programare. Baza expresiilor regulate
sunt mulimile regulate definite anterior.
Definiia 5. Fie dat un alfabet , meta simbolurile: , ,
, |,* , (, ) peste care se definete expresia regulat E
astfel:
1. Expresia E este atom peste dac este un caracter din
U {,} sau este (E) , unde E este expresie
regulat.
2. Expresia E este factor, dac este atom sau este E*, unde
E este factor peste .
3. Expresia E este termen, dac este factor sau este E
E, unde E este termen, iar E este factor peste .
4. Expresia E este expresie regulat este termen sau E|E ,
unde E expresie regulat, iar E este termen peste .

Subiectul 2

Explicaie: , ,
Caracterul ={ }, iar caracterul vid. Caracterul
poate fi omis.
Definiia 6. Limbajul L(E) definit de expresia regulat E
este:
1. L(a)={a}, L()={}, L()= .
2. L((E))= L(E)
3. L(E*)= L(E)*
4. L(E E)= L(E)L(E)
5. L(E|E) = L(E) U L(E)
Exemplu. S se prezinte ostensiv limbajele: L((1234)*),
L((1|2)*).
Folosind nume pentru expresiile regulate se poate scrie:
<cifra> 0|1|2|3|4|5|6|7|8|9
<cifre> <cifra ><cifra>*

Subiectul 3
Automate cu stri finite deterministice (AFD).
AFD reprezint un model matematic a unui dispozitiv, care poate
identifica
irurile finite de caractere ca fiind corecte sau incorecte conforme unor
reguli
precis formulate. Se mai poate afirma, ca mulimea de iruri identificate
de
AFD ca fiind corecte, adic acceptate, formeaz un limbaj. Mai mult,
conform
Definiiei 4., elementele acestui limbaj au un caracter regulat (mulime
regulat,expresie regulat)
Definiia 7. AFD este definit de urmtoarele componente:
1. A mulimea finit a caracterelor formatoare de iruri finite
alfabetul.
2. S mulimea finit de stri.
3. s0 starea iniial a automatului.
4. F - o submulime finit a S, care accepta irul analizat.
5. o funcie bidimensionala de tranziie dintr-o stare in alta:

:SxAS

Subiectul 2
Exemplul 1. Fie dat alfabetul {a, b}. Sa se verifice daca irul propus la
intrarea AFD conine 2 intrri consecutive ale lui b.

intrare
AFD
Accept-1

abba

Respins - 0
Forma grafic a AFD reprezint o tabel:

a
1

b
1

J
2
E
1
0
Ff
jjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
E
E
E
0
AAAAjjkkLl
Lk
A

Subiectul 2

AFD poate fi proiectat sub doua forme:


1. Acceptor - automatul analizeaz irul propus pana la
sfrit, chiar daca la un moment devine clar analiza de mai
departe nu are sens - irul e respins.
2. Procesor - automatul analizeaz irul pana la prima
eroare depistata
In exemplul 1. AFD este acceptor.
Exemplul 2. Sa se proiecteze acelai AFD ca in exemplul 1,
dar fiind n forma
de procesor.
a
b
|
1
2

1
R

Subiectul 2

n exemplul 2 se folosete semnul |, care denota sfritul


irului propus.
Acest simbol nu aparine alfabetului A. Conform tabelei de
tranziie este
tratat ca simbol. Contradicia se rezolva prin admiterea irului
vid. irul vid nu
are reprezentare grafica. Pentru a putea vorbi despre irul vid
se prezint
definiia: = .
NOTA. A nu se confunda mulimea vida { } cu .
a
b
a
b
Putem,chiar,
scrie
S irul
S
S 0
S
T
T
1
astfel: {}
vid
T
T
T
0
{}
{}

Subiectul 3

Exemplul 3. Sa se construiasc un AFD care ar identifica


cuvintele SON si
SOLAR.

{S1,
S2}

S1

O1,O

O1

O2
L
A
R

0
R

0
1

Subiectul 3
Exemplul 3 este remarcabil prin faptul, ca valoarea tranziiei AFD nu este
univoca. Poate exista o submulime de stri ca rezultat a tranziiei si, deci,
tranziia este non - deterministic. Automatul se numete cu stri finite
Non - deterministic (AFN).
Definiia 5. Un automat AFD pentru care : 1) exist o submulime de stri
iniiale si 2) funcia de tranziie se definete astfel: : S x A2 S se numete
automat cu stri finite non - deterministic (AFN).
irul de caractere este acceptat de ctre AFN, daca exista mcar un
ir finit
de stri care accepta irul propus automatului.
Automatul non - deterministic nu are nimic cu probabilitatea. Este folosit ca
un mijloc de minimizare a numrului de stri utilizate la construirea
automatului. Reieind din definiia funciei de tranziie: daca AFN are n stri,
atunci AFD are 2n stri.
Teorema 1. Pentru orice AFN exista un AFD care accepta aceleai iruri de
caractere (fr demonstrare).

Subiectul 4

Pentru a nelege cum are loc procesul de construire a AFD


pe baza automatului AFN trebuie de analizat formula de
tranziie:

D(S,x)={s|s
N(t,x) i t
S}
Exemplu 4. Construirea
AFD
AFN: AFN
A
S
L peNbaza O
R AFD
1

{s1,s
2}

{s1,s2
}

{o1,o
2}

{o1,o
2}

N
L
A
R

1
A

Sfritul Leciei 1

0
R

0
1

Tema 1

Lecia 2.
1. Echivalena AFD. Verificarea echivalenei strilor.
2. Automate: reduse (reduced), minimale.
3. Implementarea automatelor cu stri finite
3.1. Reprezentarea irurilor de intrare AFD.
3.2. Reprezentarea strilor AFD.
3.3. Construirea unui AFD pe baza unei expresii
regulate.
4. Metodele de identificare a cuvintelor.
4.1. Metoda automatelor.
4.2. Metoda indecilor.
4.3. Metoda listei ordonate.
4.4. Metoda tabelelor - hash.

Subiectul 1.

Mulimea S a strilor finite ale unui AFD reprezint o


variant de structurare a universului U al limbajului
formal L. Entitile reale (materiale) peste care se
definete aceast structurare formeaz mulimea A*
caractere. Aici, A este alfabetul
de iruri finite de
limbajului L, iar A*
L
Aseriunea 1. Prin redefinirea mulimii S de stri
fiecare AFD poate fi modificat astfel nct s accepte
aceleai iruri finite. Acest AFD modificat se va numi
echivalent cu cel AFD iniial.
Aseriunea 2. Pentru orice AFDi exista un alt AFDi ,
care accept aceeai submulime Li de iruri finite de
caractere dar cu un numr de stri Ns 1 Ns1 .
Pot fi construite mai multe AFD echivalente cu cel dat,

Subiectul 1

Definiia 7. Starea s a AFD este echivalenta cu


starea q, dac automatul, demarnd analiza
irurilor de caractere propuse n strile s i q,
respectiv, accept aceeai mulime de iruri.
Aseriunea 3. Doua automate AFD1 i AFD2 sunt
echivalente atunci i numai atunci cnd sunt
echivalente strile lor iniiale.

Definiia 8. Doua stri s1 si s2 se numesc nonechivalente, dac exist un ir d, care este acceptat
de o stare i este respins de alta. n acest caz irul d
este numit ir discriminant.

Subiectul 1

Exemplul 5. Fie date doua tabele de tranziie:


0

S se demonstreze c strile iniiale P si A sunt non-echivalente.


Aseriunea 4. Echivalena strilor este reflexiv, simetric i
tranzitiv.
Algoritmul verificrii echivalenei strilor .
Aseriunea 5. Strile s1 si s2 sunt echivalente atunci si numai
atunci cnd:
1. Ambele stri accept sau resping n acelai timp
similaritate.
2. Ambele stri tranziteaz stri echivalente consecutivitate.

Subiectul 1

Algoritmul strilor echivalente presupune


verificarea condiiilor 2) si 3) din definiia 9: dou
cte dou pentru fiecare dintre simbolurile de
intrare.
Tabela de intrare:
Tabela de echivalen:
0

0,1

0,2

3,5

0,2

0,2

3,7

3,5

6,6

5,7

3,7

6,6

3,7

5,7

3,5

Subiectul 1

Strile echivalente sunt: (0,1);(0,2);(3,5); (3,7);


(5,7) -0,1,2 si 3,5,7
Notam: 0,1,2 X si 3,5,7 Y
Ca rezultat obinem un AFD echivalent celui
iniial, dar cu mai puine stri:
0

Sfritul subiectului 1

Subiectul 2

Definiia 9. AFD automatul se numete redus,


dac:
1. Nu conine stri echivalente.
2. Nu conine stri inaccesibile din starea sa iniiala.
Exemplul 6. Sa se demonstreze ca automatul AFD
de mai jos este redus, verificnd condiiile 1) si
2) din definiia 9.

Subiectul 2

Algoritmul de minimizare a AFD.


Algoritmul presupune partiia strilor AFD n blocuri care conin numai
strile echivalente
Fie dat AFD cu tabela sa de tranziie:

1. Partiia 0
P0=({1,2,3,4},{5,6,7})
2. Partiia 1
P1=({1,2},{3,4},{5,6,7})

Subiectul 2

3. Partiia 2.
P2=(..
4. Partiia 3.
P3=({1,2},{3},{4},{5}, {6,7})
Am obinut ultima partiie, care nu poate fi supusa unei noi
partajri.
Notm: {1,2} A, {3}-B, {4}-C, {5}- D, {6,7}-E.
AFD redus i minimal va fi:
x

Subiectul 2

Exemplul 7. S se obin acelai AFD minimal prin


Algoritmul strilor
echivalente.
Sfritul subiectului 2

Analiza lexicala in cadrul unui compilator este bazat pe


modelarea unui AFD. Subiectul 3
Proiectarea unui AFD se reduce la:
1. Reprezentarea irurilor de caractere, care sunt
procesate (irurile de intrare) de automat.
2. Codificarea strilor automatului.
3. Reprezentarea tabelei de tranziie.
Pentru a asigura modelarea celor 3 elemente se recurge la
urmtoarea
schema de procesare:
intrare
Transliterator

Control
AFD

AFD
identificare

Subiectul 3

Transliteratorul este un AFD cu o singur stare care:


1. Citete fiecare simbol de intrare.
2. Creeaz lexemul de simbol.
3. Lexemul de simbol este transmis AFD de Control.
Lexemul de Control consta din dou cmpuri:clasa lexemului
(token) i valoarea. Transliteratorul funcioneaz conform
tabelei.
Lexem de
control
Token

Valoar
e

Litera

Litera

26

Cifra

Op.
arit

Subiectul 3

AFD de Control transmite lexemul de simbol pentru


identificare AFD de identificare. Acest automat funcioneaz unei
tabele-lista extensibila:
1

S
O
N
---|

SON

L
A
R
---|

SOLAR

D
O
L
A
R
---|

DOLAR

3
2

Subiectul 3.3

Aseriunea 6. Pentru orice expresie regulat E definit


peste un alfabet A exist un AFN N cu tranziii nct

L(E)=L(N).
Schema raionamentului: Metoda induciei matematice.
1. Se construiesc automatele pentru expresiile atomare:
, , a
2. Pe baza p.1 se construiete AFN pentru expresia E| E.
3. Pe baza p.1 se construiete AFN pentru expresia E E
4. Pe baza p. 1 se construiete AFN pentru expresia E*.
5. Se arat c automatele astfel construite accept
limbajele respective descrise de expresiile regulate.

Subiectul 3.3

Algoritmul de construire a AFN echivalent unei expresii


regulate date
(algoritmul Rytter)
Raionament preliminar:
1) Pentru reprezentarea fiecrei operaii | i * din expresia
regulat n automatul construit sunt necesare 2 stri.
2) Pentru reprezentarea (,) i nu se introduc noi stri.
3) Pentru fiecare simbol din alfabet i pentru sunt necesare
2 stri.
4) Tabela de tranziie trebuie s aib 2(n-m) rnduri, unde n
este numrul total de simboluri din expresia regulat, iar m
numrul de operaii care nu produc stri.
5) Tabela de tranziie trebuie s aib 3 coloane: 1- simbolul
alfabetic, 2- nodul nti i nodul secund.
Dimensiunea tabelei de tranziie a automatului construit va fi:
6(n-m).

Subiectul 3.3

Descrierea tranziiei de la expresia regulat la automatul


echivalent se
face n termenii unui arbore etichetat.
Paii algoritmului:
Nodurile arborelui sunt etichetate cu simbolurile operaiilor, iar
frunzele sunt marcate de simbolurile alfabetului limbajului
regulat.
1. Arborele este parcurs n pre - ordine ncepnd cu rdcina.
Nodurilor li se atribuie numerele 1,2,,n-m. Nodurile produs
sunt omise.
2. Arborele mai este parcurs o dat i nodurilor li se atribuie cte
un cuplu (i,f) starea iniial i starea final pentru nod
conform regulii: n.i=2k-1 i n.f=2k, unde k este numrul
atribuit nodului la p.1 i dac nodul este , atunci n.i= s.i i
n.f=d.f, unde s este nodul subordonat stnga, iar d nodul
subordonat - dreapta.
3. Se iniializeaz Tabela de tranziie pentru automat.

Subiectul 3.3

4. Se parcurge arborele a treia oar i se fac urmtoarele


calcule:
pentru nodul |: nod1[n.i]=s.i, nod2[n.i]=d.i,
nod1[s.f]=n.f,nod1[d.f]= n.f
pentru nodul : nod1[s.f]=d.i
pentru nodul *: nod1[n.i]= n.f, nod2[n.i]= s.i,
nod1[s.f]= s.i, nod2[s.f]=n.f
pentru nodul frunz: sim [n.i]=a, nod1[n.i]=n.f.
Exemplul 8. Pentru expresia regulat E =a*b| cd s se
construiasc automatul echivalent.
Rezolvare.
Rezolvarea se va face n dou etape:
ER -> arbore de derivare -> AFN

Subiectul 3

Etapa I. E=a*b |cd


( - 0, ) -4.

prioritatea: * - 3, - 2, |- 1,
\
1

Preordinea

*2

4 b

c5

6d

a 3
P=12 Dimensiunea Tabelei de tranziie = 3x12

Subiectul 3

Etapa II. Calcularea strilor iniiale i finale ale AFN


pentru fiecare nod de pe arbore.
Convenii:
N.i starea iniial a nodului N.
N.f starea final a nodului N.
S.i starea iniial a nodului subordonat stnga.
S.f starea final a nodului subordonat stnga.
D.i starea iniial a nodului subordonat dreapta.
D.i starea final a nodului subordonat dreapta.
(n.i, n.f) strile iniial i final ale nodului N.
(s.i, s.f) strile iniial i final ale nodului
subordonat stnga.
(d.i, d.f) strile iniial i final ale nodului
subordonat dreapta.

Subiectul 3.3

Etapa III: Tabela de tranziie a automatului AFN.


P
1
2
3
4
5
6
7
8
9
10
11
12

simbol

nod1

nod2

Subiectul 3.3

Elaborarea unui analizor lexical


Definiia 10. Se numete o interpretare I a cuvntului
w
L(E)
irul finit de perechi (u1, k1), (u2, k2),, (um ,km), unde w= u1u2,
,
um ,
iar ui L(Eki). Eki sunt unitile lexicale (tokens) din care
este format expresia regulat E=(E1| E2||En).
Exemplul 9. Fie expresia x1:=234; l: a12:=123, iar
E=(Asignare|PuncteV|PVirgula|Identificator|Intreg|Egal) , atunci
interpretarea I va fi I={ (x1, Identificator), (:=, Asignare), (234,
Intreg),
(;, Pvirgula), (l, Identificator), (:,PuncteV), (a12, Identificator), (:,
Asignare), (123, Intreg).
Exist i alte interpretri ale aceleiai expresii. n acest caz
interpretarea se consider a fi ambigu.
Se lucreaz cu interpretri neambigue.

Subiectul 3.3

Definiia 11. Interpretarea I a unui cuvnt w exprimat de irul


(u1, k1),
(u2, k2),, (um ,km), este interpretare drept-orientat, dac are loc
relaia:
|ui|= max{ |c| i v
L(E1||Ek) Pref(u1u2,,um )}, unde Pref este
mulimea tuturor prefixelor cuvntului w.
Definiia 12. Un analizor lexical este un program care
recunoate
Limbajul L i genereaz pentru fiecare cuvnt analizat w o
singur
interpretare drept orientat.
Planul de elaborare a unui analizor lexical
1. Se construiete un AFN astfel ca L(E) = L(A).
2. Se minimizeaz automatul obinut n p.1.
3. Se elaboreaz un program care realizeaz automatul construit

Subiectul 4

Tabela- hash. Tabelele permit stocarea, accesarea rapid


a cuvintelor(lexemelor, cuvinte-cheie). Tabele permit
extinderea eficient.
Tabelele- hash combin 2 elemente:
1. Vectorul de acces, bazat pe indeci.
2. O mulime finit de liste.

0
1
2
3

for

goto

Subiectul 4

Indexul de acces se bazeaz pe o pseudo-randomizare.


Sunt mai multe metode de calculare.
Dezavantaj suprancrcarea rapid a unor liste.

Sfritul Lecia 2

Tema 2: Gramatici. Gramaticile cu context


independent (CF). Automate cu stiv.
Lecia 3
1. Gramatici formale i limbaje formale.
1.1 Gramatici cu context independent (GCF).
1.2 Derivarea pentru GCF. Arbori de
derivare.
2. Mulimi regulate i gramaticile liniare CF.
3. Automate cu stiv (ASD).
3.1 Componentele funcionale ale unui ASD.
3.2 Definiia unui ASD extins. Translatarea.

Subiectul 1.
Gramaticile sunt o modalitate de descrie a mulimilor de iruri de
caractere. Sunt anumite similitudini ntre gramatici i expresii regulate,
ns maniera n care descriu irurile de caractere se deosebete. Acest
fapt permite exploatarea complementaritii acestor formalisme.
Definiie general. Gramatica n sens uzual desemneaz un set bine definit de reguli (numite i reguli gramaticale) care permite scrierea
corect a unor fraze lingvistice.
Limbajul, n care sunt formulate aceste reguli, ine de metalimbaj:
limbajul (poate fi i formalizat) utilizat pentru descrierea altui limbaj
( limbajul obiect). Pentru a nltura confuziile posibile, adic unde este
vorba de metalimbaj i cnd se insist pe limbajul - obiect, va fi
prezentat o notaie special.

Subiectul 1
Exemple. Metalimbaj: Limbaj:
<propoziie> -----------<subiect> -----------<predicat> arboreaz
<substantiv> drapel
<substantiv> preedinte
<obiect> ------------<adjectiv> tricolor
Regulile in metalimbaj:
1. <propoziie> <subiect> <predicat> <obiect>
2. <subiect>
<substantiv> <adjectiv>
2. <subiect>
<substantiv>
3. <obiect>
<substantiv> <adjectiv>
4. <predicat>
arboreaz
5. <substantiv> preedintele
6. <adjectiv>
tricolor
7. <substantiv> drapel
Derivarea: <propoziie> => <subiect> <predicat> <obiect>

Subiectul 2

(Continuare)

<subiect> <predicat> <obiect>


<substantiv>
<predicat> <obiect>
<predicat> <obiect>
Preedintele
Preedintele arboreaz <substantiv> <adjectiv>

Preedintele arboreaz drapelul <adjectiv>

Preedintele arboreaz drapelul tricolor


Arbore: <propoziie>
<subiect>
<substantiv>
<adjectiv>

<predicat>

<obiect>

arboreaz

Preedintele
tricolor
Arbore de derivare de stnga

<substantiv>

drapelul

Subiectul 2

Definiia 13. O gramatic G este definit de


componentele sale:
1. Mulimea finit N a non-terminalelor.
2. Mulimea finit T a terminalelor.

3. Mulimea finit R de reguli de forma <A> , unde


A N, iar - ir din terminale i non-terminale sau
este irul vid .
4. Axioma - un non-terminal cu care ncepe orice
derivare corect.
Gramaticile definite astfel sunt supranumite i
sentenionale cu
context independent - CF (Context Free).
Definiia 14. Relaia de derivare cu o gramatic G
notat =>G*
reprezint un proces (lan) cu caracter deductiv, care
ncepe cu
axioma. Paii procesului deductiv se obin prin aplicarea

Subiectul 2

Un singur pas al procesului deductiv este desemnat cu => G. Dac


gramatica nu conine reguli (partea lor dreapt e vid), atunci
procesul se noteaz - =>G+. Cnd nu exist confuzie indexul G este
omis.
Definiia 15. Mulimea L a tuturor irurilor terminale obinute prin
derivare este supranumita limbaj formal generat de gramatica G cu
context independent (GCF). Se noteaz astfel:
L(G)={t|S=>G * t, t T*, S axioma gramaticii}
Exemplul 10. Fie data gramatica G cu axioma S:
1. <S>a<A><B>c
2. <S>
3. <A>c<S><B>
4. <A><A>b
5. <B>b<B>
6. <B>a

Subiectul 2
S se obin:
1. S se deduc irul acabac folosind derivarea de stnga, apoi cea
de dreapta.
2. Sa se construiasc arborele de derivare de stnga, apoi cel de
dreapta.
3. Sa se analizeze variantele de obinere a unor iruri terminale prin
derivare.
Nota. La derivarea de stnga (dreapta) regula se aplic permanent la
non- terminalul poziionat extrem-stnga (dreapta) a formei de
derivare o instaniere a procesului de derivare.
Concluzie
4. Fiecare arbore de derivare are o singura derivare de stnga i o
singura derivare de dreapta.
5. Fiecare ir terminal obinut prin derivare poate avea unul sau mai
muli arbori de derivare.

Subiectul 2

Definiia 16. Gramatica care asigura unicitatea


arborelui de derivare pentru orice ir terminal e numit
gramatica univoc.

Sfritul subiectului 2

Subiectul 2

Descrierea mulimilor regulate utiliznd gramaticile


Metodele de descriere a mulimilor regulate de iruri finite de
caractere (AFD, AFN etc.) pot fi interpretate n termenii unor
gramatici CF. Interpretarea vizeaz forma regulilor gramaticilor
CF, anume:
Aseriunea 7. Orice mulime regulat de iruri finite de caractere
poate fi descrisa de o gramatica CF G cu regulile de forma <A>
t<B>
sau <A> i invers, unde simbolul t este terminal. Acest tip de
gramatic se numete gramatic automat (GA).
Demonstraie. Fie data o mulime regulat M descris de un AFD.
Vom
construi gramatica CF corespunztoare astfel:
1. Mulimea terminala T a gramaticii G va fi mulimea de intrare a
AFD.

Subiectul 2. (continuare)

2. Mulimea non-terminalelor gramaticii G va fi


mulimea de stri a AFD.
3. Axioma gramaticii G va fi starea iniial a AFD.
4. Tranziia din starea A in B la citirea t va avea n G
regula
<A> t<B>.
5. Daca S este starea de acceptare, atunci in G va fi
inclus regula <S>
Metoda de construire a gramaticii G permite
definiia unei
corespondene one-to-one ntre tranziiile ASD i
derivrile
corespunztoare ale G.

Subiectul 3

Exemplul 11. Fie dat un AFD cu tabela de tranziie:


i

Sa se construiasc gramatica G corespunztoare,


conform p.1-5 de mai sus:
1. T={i,d} terminalele.
2. N={W, S} non-terminalele, axioma W.
3. Regulile: Wi<S>, W d<S>, <S>d<S>,
<S>i<S>, <S>.
S se obin derivrile i arborii de derivare.

Subiectul 3
Gramaticile liniare de dreapta (GLD).
Aceste gramatici descriu mulimile regulate ca i gramaticile
automate. Mai
mult, GLD pot fi reduse printr-o procedura algoritmic efectiv la GA.
Definiia 17. Gramatica CF o vom numi gramatic liniar de dreapta
(GLD),daca regulile gramaticii au forma:
<A> <B> sau <A>, unde este un ir terminal.
Procedura de reducere a GLD la GA. Procedura are paii urmtorii:
1. Regulile de forma <A> vor fi nlocuite cu:
<A> <Epsilon>
<Epsilon>
2. Regulile de forma <A>t1tn<B> vor fi nlocuite cu:
<A>t1<t2tnB>

<titnB>ti<ti+1tnB>

<tnB>tn<B>

Subiectul 3

3. Regulile <A><B> i <B>t vor fi nlocuite cu:


<A>t
4. Regulile de forma <A><A> vor fi eliminate.
Exemplul 12. Fie data gramatica LD:
<A> ab<B>
<B>bc<B>
<B>b<A>
<B>c<A>
<A>
Sa se obin GA echivalent i s se construiasc AFD respectiv.
Exemplul 13. Se d un fragment de program:
Real var, , var ..
1. S se elaboreze gramatica CF care ar descrie lista de
variabile.
2. Sa se construiasc AFD care ar accepta fragmentul prezentat.

Subiectul 3
Proceduri de eliminare a non-terminalelor nefuncionale intr-o
GFC.
Non-terminalele nefuncionale sunt clasificate astfel:
1. Non-terminale sterile: <A>b<B>; <B><A>d {A,B}
2. Non-terminale inaccesibile: <A>b<B>;<B>c;<C>d -{C}
3. Non-terminale inutile: Sterile U Inaccesibile {A,B} U {C}={A,B,C}
4. Non-terminale productive:<A>b<B>;<B>c -{A,B}.
. Procedura de eliminare a non-terminalelor sterile se bazeaz pe
aseriunea:
Aseriunea 9. Daca simbolurile non-terminale din dreapta regulii sunt
productive, atunci i simbolul din stnga regulii este productiv.
Procedura 1:
1. Sa se formeze lista L1 a tuturor non-terminalelor din stnga care nu
au non-terminale n dreapta regulilor.
2. Daca exista un non-terminal din stnga regulilor, pentru care partea
dreapta conine numai non-terminale din lista L1, atunci nonterminalul este inclus i el n lista.
3. Daca lista L1 rmne intact la executarea p.2, atunci procesul ia
sfrit.

Subiectul 3

Procedura de eliminare a non-terminalelor inaccesibile este


bazata pe aseriunea:
Aseriunea 9. Dac non-terminalul din stnga regulii este accesibil,
atunci
sunt accesibile toate non-terminalele din dreapta regulii gramaticii.
Procedura 2:
1. n lista L2, iniial vid, este inclus axioma gramaticii.
2. Dac exist o regul cu partea stnga n list, atunci toate nonterminalele din dreapta acestei reguli sunt adugate la lista L 2.
3. Daca la repetarea p.2 la lista L 2 nu mai sunt adugate noi
simboluri, atunci lista L2 conine toate non-terminalele accesibile.
Procedura 3.
4. Pentru a elimina non - terminalele non-productive eliminm
regulile cu non-terminalele care nu se conin in lista L 1.
5. Pentru a eliminm non-terminalele inaccesibile eliminm regulile
cu non-terminalele care nu se conin n lista L 2

Subiectul 3

Exemplul 18. Se d gramatica:


<A> a<A>
<A> c
<B>b<C>
<C>a<B>
<D>abc
S se elimine regulile ce conin non-terminale sterile i inaccesibile.
Exemplul 19. Se d gramatica:
<E><E>+<T>
<E><T>
<T><T>*<F>
<T><F>
<F><F>^<P>
<F><P>
<P>(<E>)
<P>I

Subiectul 3

1. Sa se analizeze expresia aritmetica construind arborele de


derivare:
a+b*c + (e+d)*f
2. Sa se verifice prezena non-terminalelor sterile i
inaccesibile.
Sfritul subiectului 3

Subiectul 4
Automatul cu stiv determinist
Limbajele formale regulate (LFR) pot fi pe deplin descrise de AFD (AFN):
mulimile irurilor de caractere finite (LFR) sunt acceptate sau respinse de un
AFD. AFD folosete cu acest scop o memorie finit i fixat (nu poate fi
extins sau restrns n procesul de recunoatere a limbajului). Memoria
unui AFD este format de strile definite. Un limbaj de programare are o
structur mai complexa dect un LFR. De exemplu, folosirea perechilor de
paranteze nu poate fi procesata de un AFD: numrul de stri utilizate nu
este
predictibil, ci depinde de numrul de paranteze deschise i nchise, deci,
este
variabil. Pentru gestionarea unor astfel de fenomene se propune un nou tip
de automat automatul cu stiv determinist (ASD).
Definiia 18. Un ASD const din:
1. Mulimea finit de caractere - alfabetul A, care conine marcatorul: |
2. Mulimea finit de caractere pentru memoria extensibila stiva M cu
semnul marcheaz nceputul stivei.

Subiectul 4

Comentariu la definiia 18:


Schema grafic a unui
ASD
1
0 Intrarea
0
0 irul
1 de
1 procesat
1
0 (A)0
|

Control

D
C
A
B

Starea
Ieirea
Stiva

Output

Subiectul 4 (continuarea definiiei 18)

3. Mulimea finit de stri S cu starea iniiala - s 0.


4. Funcia de tranziie :A x M x S (a,m,s)
Unitatea de Control (UC)
n dependen de informaia procesat UC
asigur tranziia pe
baza:
1. Strii unitii de control.
2. Simbolului din vrful stivei.
3. Simbolul de intrare analizat.
Tranziia rezid n efectuarea unor operaii asupra
strilor, stivei
i a simbolului de intrare analizat.

Subiectul 1

Definiia 19. Tranziia este definit de urmtoarele clase de


operaii:
A. Operaia cu starea:
State (s) tranziia n starea s (starea s devine curent).
B. Operaiile cu stiva:
Push down (u) - mpinge n stiv simbolul u.
Pop up - extrage simbolul superior din stiv (coninutul
stivei se modific).
SKIP: stiva rmne intact (neschimbat). Operaia nu
are imagine.
C. Operaii cu irul de intrare (analizat):
Shift - se analizeaz urmtorul simbol de intrare.
Hold - simbolul analizat rmne simbol curent.
(continuare)

Subiectul 1

Exemplul 20. Sunt date:


1) A={(,),|} simbolurile de intrare, unde ( i ) sunt
parantezele rotunde, iar | - sfritul irului analizat.
2) M={X, } simbolurile stivei, este simbolul inferior,
sfritul stivei, care nu poate fi eliminat din stiv cu
operaia Pop up.
3) S={s} mulimea strilor (o singura stare; ea i este
iniial).
4) Iniial, stiva conine doar simbolul .
Se cere: Sa se construiasc un ASD, care verific
corectitudinea intrrilor de paranteze n irul propus
spre analiz (fiecare paranteza ( trebuie s aib
corespondenta sa paranteza )).
test: ( ( ()()) () () ) sa se testeze pentru irul propus.
(continuare)

Subiectul 4

Rezolvare: Tabela de tranziie

Push(X
)
Shift

Pop
Shif
t

Push(X R
A
ASD construit are o )singur stare, care nu este artat.
Shift

Pentru exemplificare pot fi etalate configuraiile:


stiva
starea
intrarea
1:
s
( ()) |
2: X
s
()) |
3: XX
s
)) |
4:X
s
) |
5:
s
|

Subiectul 4

Exemplul 21. Sa se construiasc un ASD, care ar accepta


iruri din mulimea:
{1n0n |n>0}.
Sunt date:
1) A={0, 1, |}
2) M={, U, V}
3) S= {s1,s2}, iniiala - s1
Rezolvare:
Starea s1
Starea s2
U

State(
s2)
Pop
Shift

State( R
s1)
Push(U
)
Shift
State( R
s1)
Push(U
)

State(s R
2)
Pop
Shift

Subiectul 4

Extensiunea operaiilor pentru ASD


1) Prima extensiunea ine de lucrul cu stiva operaia
substituiei multiple:
Subst() :extrage simbolul superior din stiv i mpinge irul
, format din elementele M n stiv.
Folosind operaia Subst putem rescrie soluia din exemplul 21:
Tabela cu operaia extins
0

Pop
Hold

Subst(U
V)
Shift

Pop
Shift

Nota. Soluia nu utilizeaz a doua stare s 2

Subiectul 1

2) Automatul ASD poate funciona i n regim de translatare.


Cu acest scop
se ataeaz la Unitatea de Control un suport de ieire
(output) pe care se
va scrie traducerea (interpretarea) irului analizat (vezi
schema). Operaia de
translatare este:
Output(): scrie pe suportul de ieire simbolurile irului .
Exemplul 22. Sa se translateze irurile mulimii A+, unde
A={0, 1}, n irurile
0
1
|
mulimii {1m0n} i m, n sunt numrul de 1 respectiv 0 din irul
Z
Push(Z)
Output(1)
Pop
translatat.
Shift Tabela
Shift
Output(0)
de translatare
Hold

Push(Z)
Shift

Output(1)
Shift

Subiectul 2

Tema 2
Lecia 4.
1. Procesarea sintactic orientat a
limbajelor CF.
1.1 Translatarea LCF. Formularea
problemei.
1.2 Scrierea postfix polonez a
expresiilor aritmetice (SPP).
2. Gramatici de translatare.
Translatarea sintactic orientata.
3. Derivarea unui limbaj descris de o
gramatic CF cu un ASD.

Subiectul 1

Formularea problemei. Fie data expresia aritmetica: a+b*c i se


cere a
fi calculat valoarea ei numeric. Pentru aceasta trebuie s tim:
1) valorile lui a, b, c pe care le vom nota {a}, {b}, {c}, respectiv.
2) cum sunt executate operaiile + si *. Procedurile le vom nota
{+} i
{*}, respectiv.
3) lund n consideraie p.1 si p.2 precum i prioritile lui + i *
putem
transcrie expresia astfel: a{a}+b{b}*c{c}{*}{+}.
4)simbolurile incluse n expresie { i } sunt aciunile din mulimea
A.
5) scriem intr-un sir numai aciunile obinem: {a}{b}{c}{*}{+}.
Aceast
expresie ne sugereaz ce trebuie sa facem pentru a calcula
expresia: a+b*c.
6) in p.5 omitem { i } i atunci obinem: abc*+ scrierea postfix
polonez (SPP) .

Subiectul 1
7) cnd scriem a+b*c intuim, de fapt, abc*+. Ultima expresie poate

fi
considerat traducerea (translatarea) expresiei a+b*c.
8) forma obinuit de scriere a expresiei a+b*c va fi numit infix,
iar
scrierea abc*+ postfix.
Exemplul 23. S se traduc expresia (a+b)*c+ e*f n scrierea
postfixa.
Definiia 20. Gramatica G va fi numita gramatica scrierii postfixe
(GSP) dac are forma:
<operand> <operand><operand>+
<operand><operand><operand>*
<operand>I
Exemplul 24. S se construiasc pentru expresia (a+b)*c+e*f
derivarea i
arborele de derivare de stnga n gramatica GSP de mai sus.
Sfritul subiectului 1

Subiectul 2

Definiia 21. Gramatica CF de translatare (GCFT) include


componentele:
1. Mulimea de simboluri terminale T.
2. Mulimea de aciuni T.
3. Mulimea de simboluri non-terminale N.
4. Axioma S.
5. Mulimea de reguli de forma <A>, unde este un sir format
din terminale, non-terminale si aciuni.
Exemplul 25. Fie data gramatica de translatare:
<E><E>+<T>{+}
<E><T>
<T><T>*<P>{*}
<T><P>
<P>(<E>)
<P>a{a}
<P>b{b}
<P>c{c}

Subiectul 2
S se construiasc derivarea pentru expresia: a +(a+b)*c.
Rezolvare:
<E> <E>+<T> {+} <T>+<T>{+} <P>+<T>{+} a{a}

+<T>{+} a{a}+<T>*<P>{*}{+}
a{a}+<P>*<P>{*}{+}

a{a}+(<E>)*<P>{*}{+} a{a}+(<E>+<T>{+})*<P>{*}{+}

a{a}+(<T>+<T>{+})* <P>{*}{+}
a{a}+
(<P>+<T>{+})*<P>{*}{+} a{a}+(a{a}+b{b}{+})*<P>{*}

*
{+} a{a}+(a{a}+b{b}{+})*c{c}{*}{+}

Facem urmtoarele:
1. Pentru a obine translatarea extragem din rezultatul derivrii
aciunile
respectnd ordinea apariiei: {a}{a}{b}{+}{c}{*}{+}
rezultatul traducerii.
2. Omitem { i } i obinem : aab+c*+ scrierea postfix asa
gndim!
3. Rezultatul obinut poate fi interpretat ca semantica expresiei a+
deri
var
e
(a+b)*c
Sintaxa
Semantica

Subiectul 3
Procesul de derivare bazat pe o gramatica CF ne sugereaz posibilitatea de a
automatiza acest proces folosind ASD. Raionamentul principal n acest
sens este:
Aseriunea 10. Formele senteniale conin toat informaia necesara lurii
deciziei: care dintre reguli trebuie aplicat pentru continuarea derivrii.
Decizia este luata pe baza: 1) non-terminalului curent (de stnga sau de
dreapta) al formei, 2) simbolului de intrare analizat, 3) strii procesului nsui.
n acest scop (automatizarea) poate fi folosit un ASD.
Definiia 22. Automatul SD destinat derivrii irurilor finite de caractere
conform unei gramatici GCF include:
1. Mulimea de intrare A, care coincide cu mulimea T de terminale a G.
2. Mulimea simbolurilor M stiva, care conine non-terminale, terminale ale G.
3. Simbolul special al stivei, care marcheaz prima poziie a stivei.
4. Mulimea finita de stri S cu starea iniial - s 0.
5. Funcia de tranziie :A x M x S (a,m,s) Unitatea de Control (UC)

Subiectul 3

Exemplul 26. Fie data gramatica CF:


<S> d<S><A>
<S>b<A>c
<A>d<A>
<A>c

Fie derivarea <S>


d<S><A>
db<A>c<A>

dbccdc
1. <S>
dbccdc
2. <A><S>
bccdc
3. <A>c<A>
ccdc
4. <A>c
cdc
5. <A>
dc
6. <A>
c
7.
|

Subiectul 3

Tabela de tranziie a ASD


d

<S>

Subst(<A>
<S>)
Shift

Subst(c<
A>)
Shift

<A>

Subst(<A>)
Shift

Pop
Shift

Pop
Shift

Sfritul subiectului 3

Subiectul 4
Construirea unui ASD pe baza unei gramatici CF poate fi prezentat sub
forma
unei proceduri efective.

Procedura 1. (GCF
ASD).
1. Mulimea terminal T (GCF)
Mulimea Input ASD+|

2. Mulimea N (GCF) + (T\ terminale prima poziie)


Mulimea Stiva

+
Subst(inv), Shift
3. Reguli GCF forma: <A>a

<A>a Pop, Shift

Pop, Shift, dac stiva:a input:a

4.
stiva: input:|, atunci - A
5. Celulele tabelei ASD care nu au fost completate , atunci R
Exemplul 27. 1) Fie data gramatica:
<A>ab<B>
<A>b<B>b<A>
<B> a
<B>b<B>

Subiectul 4

2) S se construiasc tabela ASD aplicnd regulile 1-5


Procedura 1.
Tabela
a

<A>

#1

#2

<B>

#3

#4

Pop,
Shift

#1 Subst (<B>b), Shift


#2 Subst(<A>b<B>), Shift
#3 Pop, Shift
#4 Subst(<B>), Shift
3) S se construiasc configuraiile ASD pentru irul derivat.

Subiectul 4

Procedura 1 (GCF
ASD) de mai sus poate fi extins i
pentru gramaticile
CF de translatare
(GCFt).
Procedura 2 (GCFt
ASDt).
1. Mulimea terminal T (GCFt)
Mulimea Input ASDt+|
2. Mulimea N (GCF) + (T\ terminale 1- poziie)+
Mulimea
Stiva +
Mulimea (A\ aciuni 1-poziie)
3.
Reguli GCF forma: <A>{}a{}
Out(),
Subst(inv), Shift
<A>{}a{}Out(), Pop, Shift
4.
Pop, Shift, daca stiva:a input:a
5.
stiva: input:|, atunci - A
6.
stiva:{x}, atunci- Out(x), Pop,Hold
7. Celulele tabelei ASD care nu au fost completate
,atunci
R

Subiectul 4

Exemplul 28. 1) Fie data gramatica translatant:


<A> {w}a{v}<S>{x}<B>
<S> {z}
<B><T>c
<T>b{y}
2) Sa se construiasc tabela ASDt folosind regulile 1-7
Procedura 2.
Tabela
si referinele
a
b
c
|
<A
>

#1

<S
>

#2

#1

Out(w,v),Subst(<B>{x}<
S>),Shift

<B
>

#3

#2

Out(z), Pop, Hold

#3

Subst(c<T>), Hold

<T
>

#4

Out(y), Pop, Shift

#5

#5

Pop, Shift

#4

Referintele

Subiectul 4

3) S se obin configuraiile ASDt pentru un sir derivat de


stnga.
4) Care este traducerea irului derivat.
Sfritul subiectului 4

Sfritul Temei 2

Tema 3: Metode descendente de


procesare a LCF. Gramaticile LL(1).
Lecia 5.
1. Metode descendente de procesare a
LCF.
1.1 S-gramatici. Proiectarea ASD pentru
s-gramatici.
1.2.Q-gramatici. Proiectarea ASD pentru
q- gramatici.
2. Gramaticile LL(1). Proiectarea ASD
pentru LL(1).
3. Metode descendente pentru gramatici.

Subiectul 1

Metode descendente de procesare.


Metodele descendente (top-down) de procesare
construiesc analizorul sintactic pe baza gramaticii LF,
genernd arborii de derivare a irurilor analizate de la
rdcina (axioma gramaticii) spre frunze (leaves)irurile terminale.
Toate gramaticile de pn acum au fost procesate prin
metode descendente.
Ideea metodelor de procesare prezentate const (la
etapa final) n construirea unui ASD pe baza
gramaticii procesate. Anume, ASD construit i va
efectua analiza sintactica a fragmentului de LCF.
Pentru realizarea acestei idei sunt necesare restricii
la forma regulilor gramaticilor utilizate.
Analiza sintactica descendent se va face numai cu
automate cu stiv deterministe.

Subiectul 1
S-gramaticile.
Definiia 23. Gramatica CF este o s-gramatica dac:
1. Partea dreapta a fiecrei reguli ncepe cu un terminal.
2. Prile drepte ale regulilor cu acelai non-terminal n stnga ncep
cu terminale diferite.
Exemplul 29. Gramatica prezentat:
<A>a<P>f<P>
<A>b<S>
<P>c<S>
<P>e
<S>m
este o s-gramatic.
Practic, toate gramaticile folosite pentru exemplificare pn acum au
fost
s - gramatici, de aceea rmn valabile tehnicile prezentate anterior.
Metodele descendente asigur proiectarea efectiv a ASD
Q-gramatici.
Definiia 24. S-gramaticile care conin i epsilon- reguli se numesc qgramatici.

Subiectul 1

Exemplul 30.1) Fie data q-gramatica:


<A>a<P><A>
<P>c<P><A>
<P>
<A>f
2) S se construiasc un ASD care accept irurile de
terminale generate de q- gramatica dat.
Rezolvare.
a

<A
>

#1

#2

#1

Subst(<A><P>),S
hift

<P
>

#4

#3

#4

#2

Pop, Shift

#3

Subst(<A><P>),
Shift

#4

Pop, Hold

Referinte

Subiect 2

Folosind Exemplul 31 vom genera configuraiile ASD


pentru irul aacff:
<A>
aacff
# <A>a<P><A>
<A><P>
acff # <P>
<A>
acff #<A>a<P><A>
<A><P>
cff # <P>c<P><A>
<A><A><P>
ff #<P>
<A><A>
ff #<A>f
<A>
f #<A>f

Comentariu.

Subiectul 2
Analiza soluiei pentru Exemplul 31.
Reieind din analiza soluie aplicaia regulii <P> este condiionat
de
terminalele imediat urmtoare ocurenei non-terminalului <P>, deci, a i
f.
Vom introduce mulimea terminalelor imediat urmtoare pentru fiecare
epsilon- regul a gramaticii:
FOLLOW(<P>)={a,f}
Pentru a raionaliza algoritmul proiectrii ASD vom mai introduce
mulimea:
SELECT(<P>c<P><A>)={c}
Daca extindem pentru toat gramatica analizat vom avea:
SELECT(<A>a<P><A>)={a}
SELECT(<P>c<P><A>)={c}
SELECT(<P>)=FOLLOW(<P>)={a,f}
SELECT(<A>f)={f}
Pe baza acestor mulimi putem construi ASD corespunztor pentru analiza
descendent.

Subiectul 2

Condiia existenei unui ASD pentru gramaticile de tip


S si Q.
1. Prile de dreapta a gramaticilor reprezint sau ncep cu
un terminal.
2. Mulimile SELECT pentru regulile cu aceeai parte stng
nu se intersecteaz.
Exemplul 32. 1) Fie dat gramatica:
<A>a<B>
<A>b
<B>c<A>a
<B>
2) S se determine tipul gramaticii.
3) S se construiasc pentru gramatic mulimile FOLLOW i
SELECT
4) S se construiasc ASD pentru derivarea descendent.

Subiectul 3
Fie data gramatica:
1.<A> a<S><B>
2.<S>
3.<B><T>c
4.
<T>b
Gramatica nu este nici de tipul S, nici de tipul Q. Pentru a demonstra
acest
lucru vom construi mulimile FOLLOW si SELECT:

SELECT(1)={a}

SELECT(2)=FOLLOW(2)=..{b}
?

SELECT(3)= ..{b}
?

SELECT(4)={b}
Soluia poate fi intuit pentru 2 si 3: <A>
a<S><T>c
a<S><B>

a<S>bc, deci, FOLLOW(2)={b}


n mod analogic se calculeaz SELECT(3).
Exemplul 33. S se construiasc pentru gramatica de mai sus ASD de
derivare.

Subiectul 3

Prin urmare se cere introducerea unei mulimi care ar gestiona


primele terminale de la nceputul prii drepte a regulii:

FIRST(<T>c)={b}
Restul mulimilor se rescriu astfel:

SELECT(1)={a}

SELECT(2)={b}

SELECT(3)=FIRST(<T>c)={b}

SELECT(4)={b}
Definiia 25. irul secvenial (terminale i non-terminale) al unei
gramatici

cu epsilon-reguli se numete nul, daca exist derivarea: *


Exemplul 34. Fie dat gramatica:
1.<A><B>
2. <B>c<S>d
3.<B>
4.<S>d

Derivarea <A> <B> este una nul

Subiectul 3
1) S se construiasc mulimile pentru regulile gramaticii:
SELECT(1)=FIRST(<B>) ={---|}
SELECT(2)= FIRST(c<S>d)={c}
SELECT(3)= FIRST() U FOLLOW(<B>)={ } U {|}= {|}
SELECT(4)=FIRST(d)= {d}
2) S se construiasc ASD care asigura derivarea pentru gramatica de mai
sus.
Definiia 26. Gramatica CF se numete gramatic de tipul LL(1) a.n.a.c
mulimile SELECT pentru regulile gramaticii nu se intersecteaz.
Exemplul 35. Fie data gramatica:
1.<E><T><Elist>
2. <Elist>+<T><Elist>
3.<Elist>
4. <T><P><Tlist>
5. <Tlist>*<P><Tlist>
6. <Tlist>
7. <P>(<E>)
8. <P>I

Subiectul 3

2) S se deriveze expresia: a+(a +b)*c


3) S se determine tipul gramaticii.
4) S se construiasc mulimile SELECT, FOLLOW i FIRST
pentru regulile gr.
5) S se construiasc un ASD pentru aceast gramatic.
6) Sa se transforme gramatica ntr-o gramatica de translatare.
7) Sa se construiasc un ASDt care translateaz expresia
gramaticii. SELECT(1)= FIRST(<T><Elist>)={id, (}
SELECT(2)= FIRST(+<T><Elist>)= {+}
SELECT(3) = FOLLOW(<Elist>) = {) , |}
SELECT(4) = FIRST(<P><Tlist>) = {id,(}
SELECT(5) = FIRST(*<P><Tlist>)=..
SELECT(6) = FOLLOW(<Tlist>)= {+, ), |}
SELECT(7) = FIRST((<E>))= {(}
SELECT(8) = FIRST(I)={id}

Subiectul 3

Algoritmul de calculare a multimii FIRST pentru gr. LL(1) din


Ex. 35
1. Relaii.
Definiia 27. Relaia R definit pe mulimea finit S este dat expresia:
R={(r1, rn) |( r1, rn) S xx S } , S se numete mulimea portant.
Definiia 28. Daca n=2, atunci relaia R se numete binar i se scrie

(r1,) R,
sau r1R r2.

Exemple. Fie S numerele naturale ( n numere), atunci <,


sunt relaii
binare.
Relaiile definite au anumite proprieti:

1. Reflexivitatea: a=a, < este non-reflexiva, dar


este o relaie
reflexiv.
atunci b=a.
2. Simetria(antisimetria): a=b,
3. Tranzitivitatea: a<b si b<c
a<c .
Relaiile binare pot fi reprezentate grafic (sub form de graf).
Exemple. Fie data relaia refer la, atunci putem reprezenta:

Subiectul 3

b
a c
Sunt definite: a refer lab i b refer la c. Din acest fapt nu reiese, c a
refer
la c. Pentru a asigura tranzitivitatea trebuie definit poriunea roie. Acest
procedeu se numete nchiderea tranzitiv a relaiei.
Definiia 29. nchiderea tranzitiv a relaiei R este o procedur
algoritmic,
care extinde relaia astfel, nct este garantat tranzitivitatea. Relaia R
supus nchiderii tranzitive este notat . Exista noiunea de nchidere
reflexivo tranzitiv. Prezentai exemple.
Relaiile pot fi reprezentate i matricial:

a
1

b
c

1) refer la

2) nchiderea tranzitiv refer la

Subiectul 3
Exemplul 36. Sa se elaboreze un program care ar asigura obinerea
nchiderii
reflexivo-tranzitive pentru o relaie binar R cu mulimea portant
S (n=5).
2. Soluia pentru mulimea FIRST (gr. Ex. 35).
Relaia BDW

<E <T <P


> > >
<E
>
<T
>

<Elis <Tlis i + * ( )
t>
t>

<P
>
1) Relaia BDW(begins
directly with) 1
Elist
2) Relaia BDW
> + BW(begins with) - *

Tlist
>

1
1

Subiectul 3
Relaia BDW+ i este mulimea FIRST: matricea se citete pe rnduri,
de
exemplu, FIRST(<T><Elist>)={I, (}. Se ia n considerare : 1 i *.
Metoda coboririi recursive.
Ideea metodei: 1) Gramatica trebuie sa fie de tipul LL(1).
2) Se modeleaz funcionarea ASD cu ajutorul unui limbaj de nivel
nalt, care
permite executarea recursiv a procedurilor.
3) Fiecrui non-terminal din gramatica i se pune in coresponden o
procedur.
4) Apelarea procedurilor se face pe baz recursiv.
Exemplul 37. Fie data gramatica:
1. <S> a<A><S>
2. <S>b
3. <A>c<A><S>b
4. <A>

Subietul 3

Schema interactiunii procedurilor

Main program

Procedure
ProcS

Procedure
ProcA

Set
Input=simbol(1)

Caz din:
a R1

Caz din:
a R3

ProcS;
Dac Input -|
atunci
Respins;
Acceptat;

R2

R3

-| R
R1: Shift;
ProcA;
ProcS;
Return;
R2: Shift;
Return;

-| R
R3: Shift;
ProcA;
ProcS;

Dac Input
atunci
Respins;
Shift;
Return;

Subiect 3

1.
2.
3.
4.

S
S
S
S

se
se
se
se

construiasc un ASD conform metodei tradiionale.


verifice corectitudinea ASD construit.
proiecteze un program care modeleaz ASD.
verifice corectitudinea programului elaborat.

Tema 4: Metodele ascendente de procesare a LCF

Lecia 6
1.Metode ascendente de procesare .Concepte.
1.1 Conceptul de baza(handle).
1.2 Conceptul de deplasare (shift).
1.3 Conceptul de identificare.
1.4 Conceptul de reducere
2.Metode de tipul deplasare-identificare
3. Metode de tipul deplasare-reducere.
4. Gramatici LR(0).Procesarea cu ASD(II).
5. Gramatici SLR(1). Procesarea cu ASD(II).

Subiectul 1

Ideea general:1) Se d o gramatic G CF pentru care


exist derivarea de
dreapta definit univoc.
2) Se d un ir terminal (o mulime de iruri finite).
Simbolurile irurului sunt
conforme alfabetului terminal T al gramaticii G.
3) S se reconstituie derivarea de dreapta a irului analizat
(daca exist) i s
se genereze rspuns negativ dac o astfel de derivare nu
exist.
4) Reconstituirea se face de jos in sus (bottom-up), adic se
ncepe cu
Analiza irului terminal, apoi nivel cu nivel se reproduce
arborele de
derivare. Astfel de metode de analiz se numesc metode
ascendente.
Exemplul 37.
Abordarea I
Fie dat gramatica:
1. <S> (<A>b<S>)

Subiectul 1
1) S se obin un ir terminal al gramaticii prin derivarea de dreapta:
<S> (<A>b<S>)
(<A>b(b))
((<S>a<A>)b(b))

((<S>a(a))b(b))
(((b)a(a))b(b))
2) Reconstituirea se face de la stnga la dreapta n ordine invers:
3
4
(((b)a(a))b(b)) 2 ((<S>a(a))b(b))
((<S>a<A>)b(b))
1
(<A>b(b)) 2 (<A>b<S>)
<S>
Concluzie: Am parcurs bottom up toate nivelele arborelui i am ajuns la
rdcin - <S>. Reconstituirea a reuit.
Definiia 30. Fragmentele irurilor intermediare din derivarea de
reconstituire
evideniate prin subliniere le vom numi baze (handle).
Remarc. Bazele reprezint partea dreapta a regulilor gramaticii.
Definiia 31. Procesul de nlocuire a bazei cu partea stnga a regulii
gramaticale respective se va numi reducere (reduce).
Remarc. Am efectuat mai sus reducerile: Reduce(1), Reduce(2),
Reduce(3),
Reduce(4). Numerele reprezint numrul regulii din gramatic.

Subiectul 1

Pentru algoritmizarea reconstituirii descrise mai sus vom utiliza un


tip nou de ASD.
Definiia 32. ASD(I) este un ASD definit pentru metodele
ascendente cu
urmtoarele modificri:
Operaii: 1) Shift( deplasare) transfer cte un simbol din Input
stiv
2) Reduce(i) nlocuiete simbolurile din vrful stivei (numrul de
simboluri
nlocuite depinde de numrul i al regulii gramaticii).
(
a
b
)
|
3) Proceduri fragmente de cod care gestioneaz ASD(I).
<S>
ShiftASDShift
Shift Shift
Iden2 Advance n
4) Operaia
Shift din
este nlocuit
cu operaia
ASD(I) <A> Shift Shift Shift Shift Iden2
Exemplul( 38. SShift
construiasc
un ASD(I),
ar modela procesul
Shift Shift
Shiftcare
Iden1
descris n

Ex. 29.

Iden1 Iden1 Iden1 Iden1 Iden1

Shift

Shift

Shift

Shift

iden2

Shift

Shift

Shift

Shift

Iden2

Shift

Shift

Shift

Shift

Iden2

Subiectul 1
(continuare din slide-ul precedent)
Iden1: Vrful stivei: Aciunea:
(<A>b<S>) Reduce(1)
(b) Reduce(2)
(<S>a<A>) Reduce(3)
(a) Reduce(4)
Else
Respins
Iden2: <S> Acceptat
Else
Respins
Shift: Push(simbol), Advance
Reduce(1): Pop, Pop, Pop,Pop, Pop, Push(<S>)
Reduce(2): Pop,Pop,Pop, Push(<S>)
Reduce(3): Pop,Pop,Pop, Pop, Pop, Push(<A>)
Reduce(4): Pop, Pop, Pop, Push(<A>)
Remarc. Un astfel de proces asigurat de ASD(I) este supranumit
Deplasare Identificare

Subiectul 1
Abordarea II
Ideea abordrii: Pentru abordarea I era caracteristic:
1. Operaia Push este executat pn nu este mpins n stiv ). n
aceasta
stare (cu ) n vrful stivei) este apelat procedura de identificare a
bazei
Iden1.
2.
Procedura Iden1 verific simbolurile din vrful stivei i, la rndul
su, apeleaz una dintre procedurile de reducere Reduce(1),
Reduce(2) ,.
Dezavantaj: Complexitatea procedurilor de reducere.
Pentru abordarea II este caracteristic:
2. Extinderea alfabetului stivei, care ar permite memorarea de
informaie
suplimentar n stiv.
2. Pe baza analizei informaiei suplimentare se ia decizia, dac n
vrful
stivei se afl o anumit baz.

Subiectul 1
Pentru a asigura informaia necesar abordrii sunt create 2 tabele:
1. Tabela de codificare a informaiei pentru luarea deciziei de reducere
din vrful stivei.
2. Tabela de mpingere a informaiei n stiv Push-tabela.
Ambele tabele sunt gramatic-orientate. Pentru a prezenta tabelele
menionate vom apela la gramatica din Ex. 37:
1. <S> (<A>b<S>)
2. <S>(b)
3. <A>(<S>a<A>)
4. <A>(a)
Explicaie. n gramatica prezentat informaia deinuta de non-terminalele
<S> i <A> difer de la o regul la alta. De exemplu, <S> de la sfritul
regulii
1 indic penultimul simbol al bazei respective, iar acelai <S> din regula 3
refer al doilea simbol al bazei. n primul caz n stiv este ateptat simbolul
)
pentru sfritul bazei primei reguli, iar n cazul secund este ateptat
simbolul
a. Ambele cazuri necesit interpretri diferite.

Subiectul 1

Tabela de codificare
Simbol
gramatica

Simbol stiva

Sirul codat

b1
b2

(b
(<A>b

a1
a2

(<S>a
(a

(1

)1
)2
)3
)4

(<A>b<S>)
(b)
(<S>a<A>)
(a)

<S>

<S>1
<S>2
<S>3

(<A>b<S>
(<S>
<S>

<A>

<A>1
<A>2

(<A>
(<S>a<A>

Subiectul 1

Push - tabela asigur codificarea informaiei n stiv astfel:


1. Automatul analizeaz simbolul de intrare.
2. Pe baza Tabelei de codificare i a Push-tabelei se ia
decizia ce va fi mpins n stiv.
a

a1

(1

a2

(1

)4

b1

(1

)2

b2

(1

(1

a2

<S
>1
<S
>2
<S

b1

a1

(1
(1

<A
>
<A
>2

(1
(1

<S
>

<S
>2
)1

<A
>1

Subiectul 1: Tabela automatului


a
b
)

a1

Shift

Shift

Shift

Shift

a2

Shift

Shift

Shift

Shift

b1

Shift

Shift

Shift

Shift

b2

Shift

Shift

Shift

Shift

(1

Shift

Shift

Shift

Shift

)1

Reduce( Reduce( Reduce( Reduce( Reduce(


1)
1)
1)
1)
1)

)2

Reduce( Reduce( Reduce( Reduce( Reduce(


2)
2)
2)
2)
2)

)3

Reduce( Reduce( Reduce( Reduce( Reduce(


3)
3)
3)
3)
3)

)4

Reduce( Reduce( Reduce( Reduce( Reduce(


4)
4)
4)
4)
4)

<S>1

Shift

Shift

Shift

Shift

<S>2

Shift

Shift

Shift

Shift

<S>3

Shift

Shift

Shift

Shift

Subiectul 1
(continuarea slide -ului precedent)
Shift: PushTab(simbol); Advance;
Reduce(1): Pop;Pop;Pop;Pop;Pop;PushTab(<S>);
Reduce(2): Pop;Pop;Pop;PushTab(<S>);
Reduce(3): Pop; Pop;Pop;Pop;Pop;PushTab(<A>);
Reduce(4): Pop;Pop;Pop;PushTab(<A>);
Stiva: .
Exemplul 39. Pentru gr. din Ex. 37 s se obin configuraiile automatului de
mai sus.
Definiia 33. ASD(II) este un ASD definit pentru metodele ascendente cu
urmtoarele modificri:
Operaii: 1) Shift( deplasare) transfer cte un simbol pe baza Push-Tabelei
din Input stiv. Altfel, simbolul din Input este transformat conform tabelei
Push-Tabela.
2) Pop, Advance au semnificaia obinuita.
3) Reduce (p) are semnificaia de mai sus. Ea nu mai are calificativul
Respins i Acceptat.

Subiectul 1
Definiia 34. Metodele ascendente de procesare a irurilor finite de
simboluri, care se bazeaz pe ASD(II) se numesc metode de tipul
deplasare reducere.
Observaie. Metodele ascendente asigur procesarea gramaticilor de
translatare. Pentru asta aciunile trebuie incluse n operaiile
Reduce(p).
Exemplul 40. S se transcrie Tabela ASD(II) (obinut anterior) astfel
ca s
fie asigurat translatarea irului (((b)a(a))(b)) conform gramaticii de
translatare:
1. <S> (<A><S>){x}
2. <S>(b){z}
3. <A>(<S>a<A>){x}{y}
4. <A>(a)
Sfritul subiectului 1

Subiectul 2
Metodele ascendente de procesare a sirurilor de caractere bazate pe
ASD(I) necesita procedee eficiente de evidentiere a bazelor (handles).
Subiectul 1 din Prelegerea 6 contine o astfel de abordare: partile drepte ale
gramaticilor utilizate sunt incluse in paranteze( ( si )).
Dezavantj: 1.In acest caz sirurile derivate abunda de paranteze ce creeaza
o
serie de probleme.
2. Baza nu poate fi analizata si, deci, eficientizarea tabelei este imposibila.
In anumite conditii putem ,insa, renunta la aceste paranteze fara a
periclita
eficienta procesarii sirurilor finite de caractere.
Fie data gramatica:
1. <S>b<A><S><B>
2. <S>b<A>
3. <A>d<S>ca
4. <A>e
5. <B>c<A>a
6. <B>c

Subiectul 2
Gramatica prezentata nu are paranteze pentru evidentierea bazei, dar baza
poate fi lesne evidentiata cu ajutorul multimilor FIRST si FOLLOW. Aceste
multimi, aici, joaca rolul de paranteze.
Calcularea multimilor FIRST si FOLLOW se va face analizand procesul de
de derivare a sirurilor bazat pe gramatica data:
1.
2.
3.
4.
5.

<S>b<A><S><B>
<S>b<A>
<A>d<S>ca
<A>e
<B>c<A>a

FIRST 6. <B>c
FOLLOW
<S>={b, <S>}
<S>={c, |}
<A>={d, e,<A>}
<A>={a,b,c, |}
<B>={c,<B>} <B>={c, |}
a={a} a={a,b,c, |}
b={b} b={d,e}
c={c}c={a,c,d,e, |}
d={d}
d={b}
e={e} e={a,b,c, |}

Subiectul 2
Pentru a gestiona informatia continuta in FIRST si FOLLOW se invoca doua
principii: principiul impingerii in stiva si principiul reducerii bazei. Le vom
formula in continuare.
Principiul deplasarii ( Shift):
Se vor deplasa (impinge) simbolurile in urmatoarele cazuri:
1.Se va impinge simbolul w, daca varful contine D si exista M, care
urmeaza
D intr-una din partile drepte a unei reguli de gramatica, iar FIRST(<M>)
include w.
2. Varful stivei este simbolul , iar w se contine in FIRST(<S>), unde <S>
este
axioma gramaticii.
Aceasta relatie se noteaza: D BELOW w.
Principiul reduceri bazei (Reduce):
Se va reduce baza din varful stivei in urmatoarele cazuri:
1. In varful stivei se afla simbolul D, care este ultimul intr-o parte dreapta a
unei reguli de tipul <Z>D, iar simbolul curent w
FOLLOW(<Z>)

Subiectul 2

(continuare din slide-ul precedent)


2. Simbolul D este axioma, iar w este |.
Aceasta relatie se va nota: D REDUCED BY w.
Bazandu-ne pe informatia acumulata mai sus vom construi un
ASD(I).
b<A><S><B> <S>
2b<A>#5c<A>a<A>
1b<A><S><B> <B>
a={a,b,c, |}:F a
b
b={d,e}:F
c={a,c,d,e, |}:F
c
d={b}
d
e={a,b,c, |} e
1

Shift

Ident

Shift

Shift

Ident

Ident

Ident

Ident

Ident

Ident

Ident

Ident

Shift

Shift

Shift

Ident

Shift

Shift

Ident

Shift

Ident

Ident

Ident

Ident

Shift

Subiectul 2

Exemplul 33. Pentru tabela ASD(I) sa se precizeze


procedurile Ident si Shift.
Exemplul 34. Pentru gramatica:
1. <S>(b<A><S><B>)
2. <S>(b<A>)
3. <A>(d<S>ca)
4. <A>(e)
5. <B>(c<A>a)
6. <B>(c)
1) Sa se construiasca ASD(I) corespunzator.
2) Sa se construiasca ASD(II) respectiv.

Subiectul 2
In exemplul de mai sus pe baza gramaticii propuse a fost construita tabela
ASD(I), unde pentru identificare a fost folosita o singura procedura de identi
icare. O astfel de metoda se numeste: Metoda unei singure proceduri.
Pentru gramaticile Suffix-Free poate fi utilizata o metoda mai eficienta
numita: Metoda unei proceduri pentru fiecare rand
Definitia 30. Gramatica se numeste Suffix-Free, daca partea dreapta a
oricarii
reguli a gramaticii nu este sufixul partilor drepte a unor reguli.
Gramatica folosita de noi este Suffix-Free si, deci, vom prezenta doar
procedurile si tabela fara explicatiile de rigoare:
Varful stivei: Actiunea:
Iden1: <S> Acceptat
ELSE Respins
Iden2: b<A> Reduce(2)
ELSE Respins
Iden3: b<A><S><B> Reduce(1) ELSE Respins
Iden4: d<S>ca Reduce(3)
c<A>aReduce(5)
Else
Respins
Iden5:Iden6: Reduce(6):Reduce(4)

1.
2.
3.
4.
5.
6.

<S>b<A><S><B>
<S>b<A>
<A>d<S>ca
<A>e
<B>c<A>a
<B>c

Tabela automatului

<S>

Shift

Iden1

<A>

Shift

Shift

Iden2

Iden2

<B>

Iden3

Iden3

Iden4 Iden4 Iden4

Iden4

Shift

Shift

Shift

Iden5

Shift

Shift

Iden5

Shift

Iden6 Iden6 Iden6

Iden6

Subiectul 2

Fie data gramatica:

<E><E>+<T>
<E><T>
<T><T>*<P>
<T><P>
<P>(<E>)
<P>I
Gramatica nu este o gramatica SF, de aceea trebuie de impus anumite
restrictii pentru a putea fi aplicate tehnicile dezvoltate anterior.
Definitia 31. Gramatica G se numeste de precedenta slaba
(GPS)daca
1. Partile drepte ale regulilor sunt diferite doua cate doua.
2. Pentru orice doua reguli de forma:
<Z>g
<Y>
nu are loc relatia g BELOW <Y>
Gramatica de mai sus este gramatica de precedenta slaba.

Subiectul 2

Tehnici modificate pentru construirea ASD(I).


I etapa. Construirea multimilor FIRST si FOLLOW:
FIRST(<E>)={(,I,<E>, <T>, <P>}FOLLOW(<E>)= {+, ),|}
FIRST(<T>)={(,I,<T>,<P>}
FOLLOW(<T>)={+, *,),|}
FIRST(<P>)={(, I,<P>} FOLLOW(<P>)={+,*,), |}
II etapa. Construirea relatiei BELOW.
+ * I ( ) <E <T <P
> > >
<E>+<T>
+
1 1
1
1
<T>*<P>
<P>: Reduce(6)
*
1 1
1
(<E>
I
(<E>): Reduce(5)
(
1 1
1
1
1
<E>+|| <E>):Reduce(1)
)
<T>*:
:Reduce(4)
E 1
1
T

1 1

Subiectul 2

III etapa. Construirea Tabelei automatului ASD(I).


+

<E>

Shift

Shift

Iden1

<T>

Iden2 Shift

Iden2 Iden2

<P>

Iden3 Iden3

Iden3 Iden3

Shift

Shift

Shift

Shift

Iden4 Iden4

Shift

Iden4 Iden4

Shift

Shift

Iden5 Iden5

Iden5 Iden5

Shift

Shift

R
R

R
R

Subiectul 2

(continuare din site-ul precedent)


Varful stivei:
Actiunea:
Iden1: <E>
Acceptat
ELSE
Respins
Iden2: <E>+<T>
Reduce(1)
ELSE
Reduce(2)
Iden3: <T>*<P>
Reduce(3)
ELSE
Reduce(4)
Iden4:
Reduce(6)
Iden5: (<E>)
Reduce(5)
Else
Respins
Shift: Push(simbol curent), Advance
Sfarsitul subiectului 2

Subiectul 3
In Subiectul 2 a fost demonstrata posibilitatea construirii ASD(I) pentru
gramaticile SF (Suffix-Free) si gramaticile PS (Precedenta Slaba). Conditia
necesara pentru existenta procedurii de construire era lipsa de conflict
dintre procedurile Shift si Identificare.
Definitia 32. Gramatica este Conflict-Free (lipsita de conflict), daca pe
baza
simbolului din varful stivei si a simbolului de intrare vizualizat se ia univoc
decizia de inscriere in celula sutuata la intersectia randului si a coloanei
tabelului ASD procedura Shift sau Identificare.
In Subiectul 3 vom arata cum poate fi depasita aceasta restrictie cu pretul
trecerii la automatul ASD(II).
Fie data gramatica:
1. <S>a<A>b
2. <S>c
3. <A>b<S>
4. <A> <B>b
5. <B> a<A>
6. <B> c

Subiectul 3
Gramatica prezentatanu este Conflict-Free, deoarece cu <A> in varful
stivei si b vizualizat nu putem decide: este in stiva baza (regula 5) sau
avem in
stiva inceputul bazei din regula 1.
Solutia confictului ar implica examinarea simbolurilor (mai multe)
din varful
stivei nu doar a simbolului (unul ) din varful stivei.
Situatia este asemanatoare situatiei analizate cand s-a construit ASD(II):
1. Vom introduce notiunile de simbol gramatical si de ocurenta (intrarea)
simbolului in partea dreapta a regulii gramaticii
2. Fiecare simbol va avea doi indecsi: (numarul reguluii si numarul pozitiei
in regula.
3. Vom extinde alfabetul stivei incluzand simboluri indexate si marcajul .
Exemplu. <A>1 2 inseamna <A> din prima regula situat pe pozitia secunda.
Daca in regula 1 nu mai sunt si alte simboluri <A>, atunci se poate scrie
<A>1
Indexarea permite prestarea unei informatii suplimentare la luarea
deciziilor:
sa fie Shift sau Iden

Subiectul 3

Conform procedurii, vizand construirea unui ASD(II), pe


baza gramaticii se
a
b
c
<S <A <B
construieste Push-tabela:
>
>
>
I etapa:

a1
c2
<S
>0

<S
>0
a1

a5

<A
>1

b3

c6

<A
>1

b1

b1
c2
b3

a1

c2

<S
>3
<B

b4

<S
>3

<B
>4

Subiectul 3

II etapa:
Gramatica:
1. <S>a<A>b

2. <S>c
<S
3. <A>b<S> >0
4. <A> <B>ba
1
5. <B> a<A> <A
6. <B> c
>1

Tabela-automatului
a

Shift

Shift

Shift

Shift

Shift

Shift

Shift

Shift

Shift

b1

Reduce( Reduce(1 Reduce(


1)
)
1)

Reduce(
1)

c2

Reduce( Reduce(2 Reduce(


2)
)
2)

Reduce(
2)

b3

Shift

<S
>3

Reduce( Reduce(3 Reduce(


3)
)
3)

Reduce(
3)

<B
>4

Shift

Shift

Shift

Shift

Shift

Subiectul 3
Exemplul 35. Pentru sirul terminal aabcbb sa se obtina arborele de
derivare
de dreapta si configuratiile respective.
Automatul de mai sus a fost obtinut empiric (analizand gramatica). Vom
arata
ca proiectarea poate fi bazata pe o baza teoretica solida.
Definitia 33. Fie Zi este o ocurenta
gramaticala a simbolului Z, iar Y j o

ocurenta a simbolului Y, atunci Z i


OFIRST(Yj) , a.n.a.c. :

1. Zi Yj
*
2. Y X, iar <W>X si derivarea nu implica -reguli.
Definitia 34. A OBELOW B, unde OBELOW este extensia relatiei BELOW,
a.n.a.c.:
3. B OFIRST(C) , unde C urmeaza A in partea dreapta a unei reguli.
4. A
, iar B OFIRST(<S> 0)

Tabela pentru relatia OFIRST in fond este aceeasi tabela ca si tabela Push.
Exemplul 36. Sa se construiasca tabela relatiei OBELOW pentru
gramatica de
mai sus urmand Definitia 34.

Subiectul 3
a b c
Push-tabela construita
anterior poate fi

a1
c2
interpretata ca fiind
un AFD.
<S>
Pentru aceasta vom
0
adauga la dreapta o a
a5 b c6
1
coloana, care are rolul
3
de a accepta sau respin<A>
b
ge sirul de intrare
1
1

<S
>

<A
>

<B
>

<S
>0

||
Nu
In

<A
>1

<B
>4

Nu
Nu

b1

Reduce(
1)

c2

Reduce(
2)

b3

a1

c2

<S>

Nu
Reduce(
3)

<B>

<S
>3

Nu

Subiectul 3

Automatul de mai sus se numeste detector de baze.


Exemplul 37. Sa se verifice cu detectorul de baze
urmatoarele siruri
terminale: 1) aab<S> 2) aa<A><S> 3) a<B>b

Tema 5: Generatoare de cod


Prelegerea 7
1.Formularea problemei. Masina virtuala de
cod intermediar.
2.Generarea de cod sub forma de tetrade.
3.Generarea de cod sub forma de triade.
4.Generarea de cod pentru un arbore
sintactic

Subiectul 1

Vom aborda doar generarea codurilor pentru exprsiile


aritmetice.
Generarea de coduri se face pe baza unei masini virtuale
(MV), care este emulata pe calculator. Acest fapt este
conditionat de:
1. Asigurarea unui mediu multilingual pe calculator.
2. Optimizarea codul obtinut in rezulltatul translatarii.
3. Extinderea limbajului de programare realizat pe calculator.
Schema functionala a MV
Acumulator
Registre
Memoria

..

Subiectul 1

Lista comenzilor Masinii Virtuale


- incarcarea celulei C in Acululator (ACC)
memorarea ACC in celula C
sumarea ACC cu continutul celulei C. Rezultat-

Load C
Store C
Add C
ACC
Sub C
scaderea din ACC a continutului C. Rezultat - ACC
Mult C
inmultirea ACC cu C. Rezultat -ACC
Div C
impartirea ACC la C. Rezultat - ACC
Chs
schimbarea semnului ACC
.
BC
transferul de control la comanda din C.
Remarca. 1. Generarea comenzii se efectueaza cu procedura:
Gen (Add, C)

Subiectul 2

2. Acumulatorul va fi modelat de variabila globala ACC. ACC=


liber.
3. Incarcarea acumulatorului se efectueaza cu procedura:
GetACC(X,Y)
Logica procedurii:
Conditia:
Actiunea:
ACC= Gen(Load, X)
ACC=YX Y
ACC<>X Gen(Store, ACC)
Gen (Load, X)
ACC=X
Tetrada este o structura de forma:
Td(i).Op, Td(i).Oper1, Td(i).Oper2, Td(i).Rezult
Op operatia, Oper1- operandul stang, Oper2 operandul
drept,
Rezult rezultatul.

Subiectul 2

Exemplul 37. Sa se proiecteze un algoritm care ar genera


pentru MV definita
mai sus codurile tetradice pentru expresia: a*b+c.
Precizare:
Tetrada
Codurile
ACC
(*, a ,b , T1)
Load a
Mult b
T1
(+, T1, c, T2)
Add c
T2
T1 si T2 sunt variabile temporare.
Sfarsitul subiectului 2

Subiectul 3

Triadele sunt asemanatoare tetradelor, dar stocarea rezultatelor


este
modelata de doua stive: StivaR si StivaT.
StiveR contine referintele la triadele procesate iar StivaT contine
rezultatele
triadelor.
Exemplu. Triada Codurile Stive ACC
(1)
(*, a, b) Load a
Mult b (1) T1 T1
(2) (+, (1), c) Add c (2) T2 T2
Dupa inlocuire, sugerata de sageata, T1 nu mai are rost si stiva este
reconsiderata.
Exemplul 38. Sa se modeleze generarea de coduri pentru orice
expresie
aritmetica intr-un mediu de programare.
Sfarsitul subiectului 3

Subiectul 4

Expresiile aritmetice pot fi reprezentate sub forma unui arbore binar.


In
acest caz generarea codurilor poate fo efectuata cu ajutorul unor
tehnici
recursive.
Exemplu. Expresia a*b+c poate fi tratata ca un arbore:
+ (1) (*, a, b)
* c (2) (+, (1), c)
a b
In acest caz (1) reprezinta un subarbore. Ca rezultat putem enumera
cazurile:
Oper1 Oper2
ACC
Var
ACC
Subarbore
Var ACC
Var Var
Var Subarbore
. .

Subiectul 4

Exemplul 39. Folosind tehnicile recursive sa se proiecteze un


set de proceduri
care modeleaza generarea de coduri pentru MV, cand expresia
aritmetica este
reprezentata sub forma unui arbore binar. Sa se analizeze
operatiile: +, -,*,/.
Sfarsitul subiectului 4.

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