Expressions
 Une expression est une combinaison d'expression ou de valeurs, liées par des opérateurs du langage. Elle peut être affectée à une variable ou utilisée comme condition d'une structure conditionelle telle que if, while, etc...

 Il y a deux principaux types d'expressions en Scriptol,
- les expressions relationnelles ou logiques qui retournent des valeurs booléennes (true or false, donc vrai ou faux),
- et les expressions arithmétiques qui sont une combinaison de valeurs et d'opérateurs qui accomplissent des transformations sur les objets.
 Une valeur dans une expression peut être un littéral, une variable, un appel de fonction (si elle retourne une valeur)... Les opérateurs sont tous détaillés ce-dessous.

Au contraire du C et des langages dérivés, une instruction n'est pas une expression en Scriptol. Ce principe, hérité du langage Bcpl amène est source de confusion quelquefois (utiliser = au lieu de == par exemple), et limite les possibilités de la syntaxe.


Précédence

 Quelques langages de programmation on institué des règles de précédence, ainsi, quand les parenthèses sont omises, on sait quels termes sont concernés par chacun des opérateurs.
Cependant, les parenthèses restent nécessaires à la lisibilité et les omettre peut induire en erreur, c'est pourquoi elles sont requises en Scriptol.
Malgré tout, la précédence a été prise en compte dans la construction du parseur Scriptol, et même si des messages d'erreurs sont envoyés lorsque les parenthèses sont omises, le code généré fonctionne.
 Le seul cas ou la précédence est implicite sans les parenthèses, est avec les opérateurs unaires tels que not, ~, un opérateur unaire s'applique toujours au terme qui le suit.
  Par conséquent pour appliquer un opérateur unaire à une expression il faut qu'elle soit mise entre parenthèses.


Exemple d'opérateurs unaires, appliqué à une variable, puis à une expression. boolean a = true
boolean b = false

if not a and b print "premier cas"

if not (a and b) print "second cas"
Affiche: > second cas


Explication:
- not a and b vaut not true and false, donc false and false, et l'intersection vaut false, la condition n'est pas remplie et le print n'est pas exécuté.
- not (a and b) vaut not (true and false), donc not false, donc true, la condition est ici remplie et le message affiché.

 Pour finir, noter que si la précédence ne dispense pas des parenthèses en Scriptol, il peut être utile de la connaître pour convertir des programmes de C, Java ou autres langages.


Voici le tableau d'ordre de précédences, de la plus proche à la plus lointaine.

[] () .
not, ~, + -
* / mod
^^
+ -
<< >>
<  > <=  >=
=  <>
&
|
^
and
or
opérateurs
indices, groupage, référence
négation logique, négation binaire, positif unaire, négation unaire
multiplication, division, modulo
puissance
addition, soustraction binaires
décalages
comparaison d'inégalité
comparaison d'égalité
intersection
union
exclusion
et logique
ou logique
tous opérateurs dans l'assignement augmenté.


 Exercices

1) La précédence attribue l'ordre suivant aux opérateurs:
a) not
b) * /
c) + -
Soit l'expression suivante dans un programme en Java:
x = a + b * c - d / e
Convertir l'expression en Scriptol.

Réponse