Previous Page Next Page

9.4 Ambiguïtés syntaxiques

Il faut bien percevoir que la formulation de l'instruction IF n'est pas toujours sans ambiguïté à moins qu’on ne suive la convention que nous venons d’expliciter plus haut.. Ainsi par exemple, l'ambiguïté syntaxique de la construction:

IF < expr1 > THEN IF < expr2 > THEN < st1 > ELSE < st2 >;

peut être évitée par le réécriture suivante:

IF < expr1 >
THEN IF < expr2 >
THEN < st1 >
ELSE < st2 >;

On dit ici que les instructions IF sont imbriquées.

Afin d'éviter des ambiguïtés de ce genre lors de la lecture d'un programme, il est vivement recommandé de bien mettre un THEN et un ELSE de la même structure alternative au même niveau vertical afin de ne pas les mélanger entre eux. Cette façon de procéder est appelée identation ou paragraphage. L'identation est très souvent effectuée de manière automatique par un outil qui accompagne le compilateur (identeur ou paragrapheur).

En général, une telle ambiguïté syntaxique est écartée définitivement soit en utilisant les parenthèses symboliques BEGIN et END, soit en respectant la règle suivante:

& Règle: "La partie ELSE se rapporte toujours au mot réservé IF précédent le plus proche pour lequel il n'existe pas de partie ELSE."

Dans une construction de structures alternatives imbriquées il doit y avoir autant de mots THEN que de mots IF.

Ainsi par exemple, dans le texte Pascal:

IF N>0 THEN IF A>B THEN Max := A ELSE Max := B;

la partie ELSE se rapporte au mot réservé IF situé à l'intérieur de la séquence ce qui peut être élucidé en écrivant:

IF N>0
THEN IF A>B
THEN Max := A
ELSE Max := B;

Si ce n'est pas ce qu'on a voulu exprimer, il faut se servir des parenthèses symboliques BEGIN et END pour forcer des appartenances respectives comme par exemple:

IF N>0
THEN BEGIN
IF A>B THEN Max := A
END
ELSE Max := B;

Le lecteur se rendra bien compte de la signification différente des deux constructions précédentes.

Nous continuons à défendre cependant la formulation suivante qui écarte toutes ambiguïtés possibles:

IF N>0 THEN BEGIN
IF A>B THEN BEGIN
Max := A;
END;
END ELSE BEGIN
Max := B;
END;

TERMES TECHNIQUES

identation

identeur

instructions IF imbriquées

Previous Page Next Page


© Aflo Informatique , 2003-2004