Documente Academic
Documente Profesional
Documente Cultură
LF PC 2020 PDF
LF PC 2020 PDF
compilatoarelor
Prelegeri – 30 ore
Seminare – 14 ore
Laborator –1 6 ore
examen
Tema 1:Automate cu stări finite (AFD)
• Lecția 1
1. Introducere. Limbaje formale.
Implementarea limbajelor.
2. Analizor lexical. Expresii regulate.
3. Componentele unui AFD. Proiectarea
4. Componentele unui AFN. Proiectarea.
Subiectul 1
.
Subiectul 1
3. Iterația Clenee – R*=R0+R1+ …+ Rn+…,unde R2=R∙R, R0={ε} –
mulțimea cu șirul vid etc. R* obținuta astfel este mulțimea
tuturor șirurilor de caractere cu lungime arbitrara. Lungimea
unui șir este numărul de caractere utilizate la formarea șirului.
Șirul vid ε are lungimea 0.
Definiția 3. Mulțimile șirurilor de caractere astfel produse sunt
numite mulțimi regulate.
Mulțimile regulate constituie baza limbajelor formale –
vocabularul lor.
Exemplu 1. Fie dată mulțimea M={0,1,2,3,4,5,6,7,8,9}. Să se
obțină iterația Clenee de gradele 0, 1, 2, 3. Este oare mulțimea M
o mulțime regulată.
2. Fie dată mulțimea N={0, 1, 2, a, b, c}. Să se proiecteze formula
pentru obținerea mulțimii Idn – mulțimea identificatorilor
peste mulțimea N.
Definiția 4. Un limbaj L conține următoarele componente:
1. Vocabularul – o mulțime 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 mulțime de submulțimi de valori care formează baza
regulilor de interpretare semantica.
Pe scurt definiția 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.
Definiția 4 definește atât limbajele naturale, cât și limbajele formale.
În continuare ne vor interesa doar limbajele de programare – o
subclasa a limbajelor formale.
*
Limbajele de programare sunt limbaje formale elaborate pentru
a construi descrieri formale ale algoritmilor, urmând să fie
executați la calculator. Conform definiției 4 pentru a defini un
limbaj de programare trebuie de precizat: vocabularul, regulile
sintactice, regulile semantice și universul.
*
În fig. 1 este reprezentat schematic procesul de compilare. Sunt
reprezentate patru blocuri de procesare:
Interfaţa
utilizatorului
Program
sursa
Analizor
lexical
Unitati
lexicale
Analizor Tabela
sintactic simboluri
Arbore
derivare
Analizor
semantic
Cod
intermediar
Cod
Generator
masina
cod
Subiectul 1
Sfârșitul subiectului 1
Subiectul 2
a b
1 1 2 1
2 E 1 0
E E E 0
• AFD poate fi proiectat sub doua forme:
1. Acceptor - automatul analizează șirul propus pana la sfârșit, chiar dacă
la un moment devine, clar că analiza de mai departe nu are sens - șirul e
respins.
2. Procesor - automatul analizează șirul pană la prima eroare depistată.
În exemplul 1 AFD este acceptor.
Exemplul 2. Să se proiecteze același AFD ca in exemplul 1, dar fiind sub forma
de procesor.
a b ―|
1 1 2 A
2 R 1 R
În exemplul 2 se folosește semnul “―|”, care denota sfârșitul șirului propus.
Acest simbol nu aparține alfabetului A. Conform tabelei de tranziție este
tratat ca simbol. Contradicția se rezolva prin admiterea șirului vid. Șirul vid nu
are reprezentare grafica. Pentru a putea vorbi despre șirul vid se prezintă
definiția: ε= .
NOTA. A nu se confunda mulțimea vida { } cu ε. Putem,chiar, scrie
astfel: {ε} șirul vid
{} {ε}
a b a b
S S S 0 S T T 1
T T T 0
Subiectul 3
Sfârșitul Lecției 1
Tema 1
0 1 0 1
P P Q 0 A A C 0
Q R P 1 B B C 0
R P R 0 C B A 1
0 1
0 1
0 0 3 0
1 2 5 0 0,1 0,2 3,5
0,2 0,2 3,7
2 2 7 0
3,5 6,6 5,7
3 6 7 0
3,7 6,6 3,7
4 1 6 1
5,7 6 3,5
5 6 5 0
6 6 3 1
7 6 3 0
• Stările 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 obținem un AFD echivalent celui inițial, dar cu
mai puține stări:
0 1
X X Y 0
Y 6 Y 0
4 X 6 1
6 6 B 1
Sfârșitul subiectului 1
Subiectul 2
a b
1 3 4 1
3 2 1 0
4 3 3 1
. 2 4 2 0
Algoritmul de minimizare a AFD.
Algoritmul presupune partiția stărilor AFD în blocuri care conțin numai
stările echivalente
Fie dat AFD cu tabela sa de tranziție:
x y
1 6 3 0
2 7 3 0
3 1 5 0
4 6 6 0
5 7 3 1
6 4 1 1
7 4 2 1
1. Partiția 0
P0=({1,2,3,4},{5,6,7})
2. Partiția 1
P1=({1,2},{3,4},{5,6,7})
3. Partiția 2.
P2=(…..
4. Partiția 3.
P3=({1,2},{3},{4},{5}, {6,7})
Am obținut ultima partiție, care nu poate fi supusa unei noi partajări.
Notăm: {1,2} –A, {3}-B, {4}-C, {5}- D, {6,7}-E.
AFD redus și minimal va fi:
x y
A E B 0
B A D 0
C C E 0
D E B 1
E C A 1
Exemplul 7. Să se obțină același AFD minimal prin Algoritmul stărilor
echivalente.
Sfârșitul subiectului 2
Subiectul 3.3
Definiția 10. Interpretarea I a unui cuvânt w exprimată de șirul (u1, k1),
(u2, k2),…, (um ,km), este interpretare drept-orientată, dacă are loc
relația:
|ui|= max{ |c| și v L(E1|…|Ek)∩ Pref(u1u2,…,um )}, unde Pref este
mulțimea tuturor prefixelor cuvântului w.
Definiția 11. Un analizor lexical este un program care recunoaște
Limbajul L și generează pentru fiecare cuvânt analizat w o singură
interpretare drept orientată.
Planul de elaborare a unui analizor lexical
1. Se construiește un AFN astfel ca L(E) = L(A).
2. Se minimizează automatul obținut în p.1.
3. Se elaborează un program care realizează automatul construit.
Sfârșit: Lecția 2
Subiectul 4
Tema 2: Gramatici. Gramaticile cu context
independent (CF). Automate cu stivă.
• Lecția 3
1. Gramatici formale și limbaje formale.
1.1 Gramatici cu context independent (GCF).
1.2 Derivarea pentru GCF. Arbori de derivare.
2. Mulțimi regulate și gramaticile liniare CF.
3. Automate cu stivă (ASD).
3.1 Componentele funcționale ale unui ASD.
3.2 Definiția unui ASD extins. Translatarea.
Subiectul 1.
Sfârșitul subiectului 2
Descrierea mulțimilor regulate utilizând gramaticile
• Metodele de descriere a mulțimilor regulate de șiruri finite de
caractere (AFD, AFN etc.) pot fi interpretate în termenii unor
gramatici CF. Interpretarea vizează forma regulilor gramaticilor CF,
anume:
Aserțiunea 7. Orice mulțime 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 numește gramatică automată (GA).
i d ―|
W S S 0
S S S 1
Sfârșitul subiectului 3
Subiectul 4
Control D
C
A
s B
A
Starea
Δ
(continuare)
Exemplul 20. Sunt date:
1) A={(,),―|} –simbolurile de intrare, unde ( și ) sunt parantezele
rotunde, iar ―| - sfârșitul șirului analizat.
2) M={X, Δ} – simbolurile stivei, Δ este simbolul inferior, sfârșitul
stivei, care nu poate fi eliminat din stivă cu operația Pop up.
3) S={s} –mulțimea stărilor (o singura stare; ea și este inițială).
4) Inițial, stiva conține doar simbolul Δ.
Se cere: Sa se construiască un ASD, care verifică corectitudinea
intrărilor 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 tranziție
( ) ―|
X Push(X) Pop R
Shift Shift
Δ Push(X) R A
Shift
ASD construit are o singură stare, care nu este arătată.
Pentru exemplificare pot fi etalate configurațiile:
stiva starea intrarea
1: Δ s ( ()) ―|
2: ΔX s ()) ―|
3: ΔXX s )) ―|
4:ΔX s ) ―|
5:Δ s ―|
Exemplul 21. Sa se construiască un ASD, care ar accepta șiruri din mulțimea:
{1n0n |n>0}.
Sunt date:
1) A={0, 1, ―|}
2) M={Δ, U, V}
3) S= {s1,s2}, inițiala - s1
Rezolvare:
Starea s1 Starea s2
0 1 ―| 0 1 ―|
U State(s2) State(s1) R U State(s2) R R
Pop Push(U) Pop
Shift Shift Shift
Δ R State(s1) R Δ R R A
Push(U)
Shift
Extensiunea operațiilor pentru ASD
1) Prima extensiunea ține de lucrul cu stiva – operația substituției multiple:
Subst(α) :extrage simbolul superior din stivă și împinge șirul α, format din
elementele M în stivă.
Folosind operația Subst putem rescrie soluția din exemplul 21:
0 1 ―|
Z Push(Z) Output(1) Pop
Shift Shift Output(0)
Hold
Δ Push(Z) Output(1) A
Shift Shift
Tema 2
• Lecția 1. Procesarea sintactic
4. orientată a limbajelor CF.
1.1 Translatarea LCF.
Formularea problemei.
2. Gramatici de
translatare.
Translatarea
sintactic
orientata.
3. Derivarea unui limbaj
descris de o gramatică
CF
cu
un
ASD
.
4. Translat
area
sintacti
c
orienta
tă cu
un ASD.
Subiectul 1
{+}
a{a}+(a{a}+b{b}{+})*<P>{*}{+}
a{a}+(a{a}+b{b}{+})*c{c}{*}{+}
Facem următoarele:
1. Pentru a obține translatarea extragem din rezultatul derivării acțiunile
respectând ordinea apariției: {a}{a}{b}{+}{c}{*}{+} ― rezultatul traducerii.
2. Omitem { și } și obținem : aab+c*+ ― scrierea postfixă ― asa gândim!
3. Rezultatul obținut poate fi interpretat ca semantica expresiei a+(a+b)*c
Sintaxa deri var e Semantica
Subiectul 3
d b c ―|
<S> Subst(<A><S>) Subst(c<A>) R R
Shift Shift
<A> Subst(<A>) R Pop R
Shift Shift
c R R Pop R
Shift
Δ R R R A
Sfârșitul 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. Mulțimea terminală T (GCF) Mulțimea Input ASD+”―|”
2. Mulțimea N (GCF) + (T\ terminale –prima – poziție) Mulțimea Stiva +”Δ”
3. Reguli GCF forma: <A>→aα Subst(α inv
), Shift
<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>
2) Să se construiască tabela ASD aplicând regulile 1-5 Procedura 1.
Tabela
a b ―|
<A> #1 #2 R
<B> #3 #4 R
b R Pop, R
Shift
Δ R R A
Sfârșitul Temei 2
Tema 3: Metode descendente de procesare a
LCF. Gramaticile LL(1).
• Lecția 5.
Comentariu.
Subiectul 2
Analiza soluției pentru Exemplul 31.
• Reieșind din analiza soluție aplicația regulii <P>→ε este condiționată de
terminalele imediat următoare ocurenței non-terminalului <P>, deci, a și f.
Vom introduce mulțimea terminalelor imediat următoare pentru fiecare
epsilon - regulă a gramaticii:
FOLLOW(<P>→ε)={a,f}
Pentru a raționaliza algoritmul proiectării ASD vom mai introduce mulțimea:
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 mulțimi putem construi ASD corespunzător pentru analiza
descendentă.
Condiția existenței unui ASD pentru gramaticile de tip S si Q.
1. Părțile de dreapta a gramaticilor reprezintă ε sau încep cu un terminal.
2. Mulțimile SELECT pentru regulile cu aceeași parte stângă 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ă mulțimile 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 mulțimile FOLLOW si SELECT:
• SELECT(1)={a}
• SELECT(2)=FOLLOW(2)=……..{b} ?
• SELECT(3)= …..{b} ?
• SELECT(4)={b}
Soluția poate fi intuită pentru 2 și 3: <A> a<S><B> a<S><T>c
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.
• Prin urmare se cere introducerea unei mulțimi care ar gestiona primele
terminale de la începutul părții drepte a regulii:
• FIRST(<T>c)={b}
• Restul mulțimilor se rescriu astfel:
• SELECT(1)={a}
• SELECT(2)={b}
• SELECT(3)=FIRST(<T>c)={b}
• SELECT(4)={b}
Definiția 25. Șirul secvențial α (terminale și non-terminale) al unei gramatici
cu epsilon-reguli se numește 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ă
1) Să se construiască mulțimile 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.
Definiția 26. Gramatica CF se numește gramatică de tipul LL(1) a.n.a.c
mulțimile 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
2) Să se derive expresia: a+(a +b)*c
3) Să se determine tipul gramaticii.
4) Să se construiască mulțimile 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>)= {+} <E>→<T><Elist>
<Elist>→+<T><Elist>
SELECT(3) = FOLLOW(<Elist>) = {) , ―|} <Elist>→ε
SELECT(4) = FIRST(<P><Tlist>) = {id,(} <T>→<P><Tlist>
<Tlist>→*<P><Tlist>
SELECT(5) = FIRST(*<P><Tlist>)=….. <Tlist>→ε 7. <P>→(<E>) 8. <P>→I
SELECT(6) = FOLLOW(<Tlist>)= {+, ), ―|}
SELECT(7) = FIRST((<E>))= {(}
SELECT(8) = FIRST(I)={id}
Metoda coboririi recursive.
Ideea metodei: 1) Gramatica trebuie sa fie de tipul LL(1).
2) Se modelează funcționarea ASD cu ajutorul unui limbaj de nivel înalt, care
permite executarea recursivă a procedurilor.
3) Fiecărui non-terminal din gramatică 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>→ε
• Schema interacțiunii procedurilor
1. <S>→(a<A><B>c)
2. A>→(c<S><B>)
3. <A>→(<B>b)
4. <B>→(b<B>)
5. <B>→(d)
Să se proiecteze ASD pentru gramatica:
1. A> →(ab<B>)
2. <B>→(bc<B>)
3. <B>→(fb<A>)
4. <B>→(c<A>)
5. <A>→(a)
Subiectul 1
Abordarea II
Ideea abordării: Pentru Abordarea I era caracteristic:
1. Operația Push este executată până nu este împins în stivă “)”. În aceasta
stare (cu “)” în vârful stivei) este apelată procedura de identificare a bazei
Iden1.
2. Procedura Iden1 verifică simbolurile din vârful stivei și, la rândul său,
apelează una dintre procedurile de reducere Reduce(1), Reduce(2) ,….
Dezavantaj: Complexitatea procedurilor de reducere.
Pentru Abordarea II este caracteristic:
1. Extinderea alfabetului stivei, care ar permite memorarea de informație
suplimentară în stivă.
2. Pe baza analizei informației suplimentare se ia decizia, dacă în vârful
stivei se află o anumită bază.
Pentru a asigura informația necesară abordării sunt create 2 tabele:
1. Tabela de codificare a informației pentru luarea deciziei de reducere
din vârful stivei.
2. Tabela de “împingere” a informației în stivă – Push-tabela.
Ambele tabele sunt gramatic-orientate. Pentru a prezenta tabelele
menționate vom apela la gramatica din Ex. 37:
1. <S>→ (<A>b<S>)
2. <S>→(b)
3. <A>→(<S>a<A>)
4. <A>→(a)
Explicație. În gramatica prezentată informația deținuta de non-terminalele
<S> și <A> diferă de la o regulă la alta. De exemplu, <S> de la sfârșitul regulii
1 indică penultimul simbol al bazei respective, iar același <S> din regula 3
referă al doilea simbol al bazei. În primul caz în stivă este așteptat simbolul “)”
pentru sfârșitul bazei primei reguli, iar în cazul secund este așteptat simbolul
“a”. Ambele cazuri necesită interpretări diferite.
Tabela de codificare
Simbol gramatica Simbol stiva Șirul codat
b b1 (b
b2 (<A>b
a a1 (<S>a
a2 (a
( (1 (
) )1 (<A>b<S>)
)2 (b)
)3 (<S>a<A>)
)4 (a)
<S> <S>1 (<A>b<S>
<S>2 (<S>
<S>3 Δ<S>
<A> <A>1 (<A>
<A>2 (<S>a<A>
Δ Δ
Push - tabela asigură codificarea informației î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 b ( ) <S> <A>
1. <S >→ ( <A> b <S> ) a1 (1 <A>2
3 1 1 1 1 1 a2 (1 )4
2. <S>→(1 b2 )2 b1 (1 <S>1
3. <A>→(1 <S>2 a1 <A>2 )3 b2 (1 )2
4. <A>→(1 a2 )4 (1 a2 b2 (1 <S>2 <A>1
<S>1 (1 )1
<S>2 a1 (1
<S>3 (1
<A>1 (1
<A>2 (1 )3
Δ (1 <S>3
Subiectul 1: Tabela automatului
Push-table ( a b ) ―|
a1 Shift Shift Shift Shift R
a2 Shift Shift Shift Shift R
a b ( ) <S> <A>
a1 (1 <A> b1 Shift Shift Shift Shift R
2
b2 Shift Shift Shift Shift R
a2 (1 )4
(1 Shift Shift Shift Shift R
b1 (1
)1 Reduce(1) Reduce(1) Reduce(1) Reduce(1) Reduce(1)
b2 (1 )2
(1 a2 b1 (1 <S> <A> )2 Reduce(2) Reduce(2) Reduce(2) Reduce(2) Reduce(2)
2 1
1. <S>→b<A><S><B>
2. <S>→b<A>
3. <A>→d<S>ca
4. <A>→e
5. <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.
Sfârșitul subiectului 2.
Exemplul 33. Pentru tabela ASD(I) sa se precizeze procedurile Ident si Shift.
……….. …………
Lista comenzilor Mașinii Virtuale
Load C - încarcarea celulei C în Acumulator (ACC)
Store C memorarea ACC în celula C
Add C sumarea ACC cu conținutul celulei C. Rezultat- ACC
Sub C scăderea din ACC a conținutului C. Rezultat - ACC
Mult C înmulțirea ACC cu C. Rezultat -ACC
Div C împărtirea ACC la C. Rezultat - ACC
Chs schimbarea semnului ACC
…….
BC transferul de control la comanda din C.
.
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 5
• 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
…. …….
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 5.
Sfârșitul cursului