O expresie este o secventa de caractere care specifica o regula pentru calculul unei valori. Aceasta valoare poate fi: numerica, alfanumerica, booleana sau de tip structurat (vezi ARRAY sau SET). Trebuie sa va marturisim ca acum a sosit momentul sa definim acest termen mult mai precis.
O expresie poate fi foarte simpla. Cifra 7 singura (o constanta) si litera M (o variabila) sunt expresii valide. Dar, o expresie poate fi de asemenea foarte complicata.
Observati membrul drept al enuntului de mai jos:
m:=7*a+b[round(j+sqrt(x))]
unde:
O expresie are sens, în timpul compilarii, daca toate elementele componente au fost în prealabil declarate si au fost respectate regulile de sintaxa a limbajului. O expresie se calculeaza în timpul executiei daca, dupa momentul când s-a ajuns la codul obiect, tuturor identificatorilor li s-au atribuit valori (specifice) care permit sa fie evaluati.
Legile dupa care un compilator poate recunoaste daca o expresie este într-adevar corect formata pot fi stabilite dupa diagramele de sintaxa prezentate în continuare.
|
Remarca. Observati ca "expresie" este definit gradat. Mai întâi este definit "factor", apoi "termen" este definit în termenii lui "factor", apoi "expresie simpla" în termenii lui "termen" si în final "expresie" în termenii lui "expresie simpla". |
Fiecare din cei trei operatori (+,-,OR) care pot fi folositi pentru conectarea termenilor unor expresii simple se numesc operatori de adaugare (adding operators).
Fiecare din cei cinci operatori (*, /, DIV, MOD si AND) care pot fi folositi pentru conectarea factorilor se numesc operatori de multiplicare (multiplying operator).

<termen>![]() |
<expresie simpla>![]() |

Uneori "formula" este folosita ca sinonim pentru "expresie" cum este în fraza "well-formed formula" (WFF). Sa exersam putin verificând WFF direct din folosirea diagramelor de sintaxa.
Numerele 8 si 3.14159265 sunt factori legali din moment ce fiecare dintre ele este o constanta. Identificatorul p poate servi ca nume legal al unei variabile booleene si este astfel un factor.
NOT p este de asemenea un factor, ca si sqrt(x), din moment ce sqrt este un identificator functie si (x) este un parametru actual.
Fiecare din factorii citati constitue o expresie, deoarece fiecare factor este un termen, fiecare termen este o expresie simpla si fiecare expresie simpla este o expresie.
In continuare sunt prezentati câtiva termeni:
|
Exemplu:
|
Exemplul cel mai lung a fost construit utilizând regulile prezentate în diagrama de sintaxa a lui "termen", exploatând în acest sens toate facilitatile oferite.
|
Test.
Este a OR b un termen valid ? Va lasam pe dumneavoastra, stimati cititori, sa raspundeti la aceasta întrebare. |
Acum, sa incercam sa abordam o expresie mai complicata:
-(a*b+c/d*aga(x-y))
Semnul minus (unar) este acceptat în debutul unei expresii simple.
In continuare, trebuie sa verificam, daca o expresie delimitata de paranteze reprezinta un termen valabil. O expresie între paranteze este un factor valabil, si deci si un termen valabil. Asadar, problema se reduce la a determina daca expresia a*b+c/d*aga(x-y) este ea însasi valabila. Concentrându-se asupra semnului plus, constatam ca formula este o expresie, cu conditia ca fiecare din a*b si c/d*aga(x-y) sa reprezinte un termen valid. Cu siguranta a*b este, din moment ce este de forma "factor"*"factor".
Un alt termen posibil este de forma "factor"/"factor"*"factor", cu conditia sa fim încredintati ca aga(x-y) este un factor valid. Si chiar asa si este; (x-y) este un parametru actual valid, deoarece x-y este o expresie valida si aga este un nume valid pentru o functie definita de utilizator. Nu este necesar ca "identificator functie" sa se refere la o biblioteca de functii, cu toate ca acest lucru este posibil. Mai târziu (vezi Conversatia 7) vom învata sa definim propriile noastre functii.
|
Remarca. Orice constructie (Borland) PASCAL poate fi verificata cu ajutorul diagramelor de sintaxa, dar reciproca nu este adevarata. De exemplu, a mod 3.3 din punct de vedere sintactic este un termen valid, dar din punct de vedere semantic nu este valid, caci operatorul mod accepta numai termenii (operanzi) de tip întreg. |