Une expression est une combinaison d'opérandes et d'opérateurs. Son évaluation produit une valeur dont le type est déterminé par celui des opérandes et par les opérateurs selon les règles décrites dans les paragraphes suivants.
Les littéraux sont définis dans Ch 2 Les identificateurs de variables sont définis dans Ch 5 Les identificateurs de constantes sont définis dans Ch 3 Les appels de fonctions sont définis dans Ch 13
Exemples
tab[i,j]est syntaxiquement équivalent á
tab[i][j]
________________________________________________________ |opérateur | opération | type(s) des |type du résultat | | | | opérandes | | |__________|___________|_____________|__________________| |not | négation | Boolean | Boolean | |__________|___________|_____________|__________________| |+ | | integer | integer | | | | real | real | |__________|___________|_____________|__________________| |- | inversion | integer | integer | | | de signe | real | real | |__________|___________|_____________|__________________|
_______________________________________________________________________________ |opérateur | opération | type(s) des | type du résultat | | | | opérandes | | |__________|__________________|__________________|_____________________________| |* | multiplication | integer,real | integer ou real (cfr Ch 2.1)| | | intersection | T : set of ... | T | |__________|__________________|__________________|_____________________________| |/ | division | real,integer | real | |__________|__________________|__________________|_____________________________| |div | division entière | integer | integer | |__________|__________________|__________________|_____________________________| |mod | modulo | integer | integer | |__________|__________________|__________________|_____________________________| |and | et logique | Boolean | Boolean | |__________|__________________|__________________|_____________________________| |+ | addition | integer,real | integer ou real (cfr Ch 2.1)| | | union | T : set of ... | T | |__________|__________________|__________________|_____________________________| |- | soustraction | integer,real | integer ou real (cfr Ch 2.1)| | | différence | T : set of ... | T | |__________|__________________|__________________|_____________________________| |or | ou inclusif | Boolean | Boolean | |__________|__________________|__________________|_____________________________| |\= | égal | tout type simple | | | | | ou pointeur | | | | | ou ensemble | Boolean | |__________|__________________|__________________|_____________________________| |<> | est différent | tout type simple | | | | | ou pointeur | | | | | ou ensemble | Boolean | |__________|__________________|__________________|_____________________________| |<= | est plus petit | | | | | ou égal | tout type simple | Boolean | | | inclusion | ensemble | Boolean | |__________|__________________|__________________|_____________________________| |>= | est plus grand | | | | | ou égal | tout type simple | Boolean | | | contenance | ensemble | Boolean | |__________|__________________|__________________|_____________________________| |< | est plus petit | tout type simple | Boolean | |__________|__________________|__________________|_____________________________| |> | est plus grand | tout type simple | Boolean | |__________|__________________|__________________|_____________________________| |in | appartenance | T,set of T | | | | d'un élément | | | | | á un ensemble | | Boolean | |__________|__________________|__________________|_____________________________|
L'évaluation des expressions se fait de gauche á droite en respectant les règles de priorité suivantes sur les opérateurs.
not (unaire) plus prioritaire * / div mod and | - + (unaires) | - + or = <> <= >= < > in moins prioritaireToute expression entre parenthèses est évaluée indépendamment des opérateurs qui l'entourent.
Exemple
L'expression booléenne
p <= q and flag avec p,q : integer flag : Booleann'est pas correcte. En effet, les règles de priorités rendent l'expression précédente équivalente á
p <= (q and flag)ce qui est illicite car le type des deux opérandes de l'opérateur and doit être booléen. Il faut donc écrire
(p <= q) and flag
Du tableau précédent, on déduit qu'il est permis de mélanger des
opérandes de type integer et des opérandes de type real dans une
expression; les entiers seront traités comme des réels car ils
auront été convertis automatiquement en réels équivalents.
Il ne faut pas oublier, par contre, que la conversion inverse
doit toujours être exprimée explicitement á l'aide d'une des
fonctions trunc ou round.
Exemple
L'évaluation de l'expression
4.3 * 2est de type real et il y a conversion de l'entier 2 en réel 2.0. Si on veut que le résultat de l'expression soit de type integer, il est nécessaire d'utiliser l'une des fonctions trunc ou round :