Sunday, November 12, 2017

Regula de evaluare a expresiilor

Limbajele de programare au operanzi și operatori cu care construiesc expresii mai complexe sau mai puțin complexe. Există o singură regulă de evaluare a expresiilor, indiferent care sunt acestea și această regulă vizează:
- prioritatea operatorilor;
- sensul de parcurgere în procesul de evaluare.
Pentru limbajul C există tabelul:
PrioritateaOperatorDescriereaAsociativitatea
1++ --Post incrementare, respectiv decrementare 
Stânga la dreapta
()Apel funcție
[]Definire în masiv
.Referire membru în articol
->accesare pointeri în structuri
(type){list}Compunere literali
2++ --Pre Incrementare și pre decrementareDreapta la stânga
+ -Operatori unari
! ~negarea logică NOT și complement pe biți NOT
(type)Tipul
*Referirea lui
&Adrea lui
sizeofLungimea lui
_AlignofAliniere impusă
3* / %Înmulțire, împărțire și împărțire cu restStânga la dreapta 
4+ - Adunare și scădere
5<< >>Deplasare pe biți
6< <=Operatorul relațional  <  și ≤
> >=Operatorul relațional  >  și ≥ 
7== !=Operatorul relațional =  și  ≠ 
8&Operatorul și pe bițiAND
9^Operatorul logic sau exclusiv  XOR (exclusive or)
10|Operatorul logic sau iclusiv OR 
11&&Operatorul logic AND
12||Operatorul logic OR
13?:Operatorul ternarDreapta la stânga
14=Simple assignment
+= -=Assignment by sum and difference
*= /= %=Atribuire cu operații aritmetice
<<= >>=Atribuirea cu deplasare biți spre stânga, dreapta
&= ^= |=Atribuirea cu operații pe biți AND, XOR, and OR
15,VirgulaStânga la dreapta
Expresiile din parantezele rotunde se evaluează primele.
Expresia *alfa++ se evaluează *(alfa++) pentru că postincrementarea are prioritatea 1, iar operatorul de referire are prioritatea 2.
Expresia  a=3, b=5, c=7;
se evaluează de la stânga spre dreapta căci operatorul virgulă așa cere.  Se evaluează mai întâi atribuirea a=3, apoi se inițializează  b și la urmă se evaluează expresia c=7.
Expresia:
e = a < d ? a++ : a = d
se evaluează astfel:
e = ( ((a < d) ? (a++) : a) = d )
Operatorul = are prioritatea 14 și presupune evaluare de la stânga la dreapta.
Operatorul < are prioritatea 6.
Operatorul  de postincrementare ++ are prioritatea 1.
Operatorul ?: are prioritatea 13.
Se evaluează expresia a<d.
Dacă rezultatul evaluării este adevărat are loc postincrementarea și apoi e=a.
Dacă rezultatul evaluării nu este adevărat are loc atribuirea e=d.

În lucru acum
(13 noiembrie 2017)

No comments:

Post a Comment