“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 98 — #108
i
i
i
i
i
i
i
i
98
2
• La programmation déclarative
2.7.3 La syntaxe complète
Le tableau 2.10 donne la syntaxe de l’instruction try dans le langage complet. Il y
a une clause finally qui est facultative. La clause catch peut prendre une série
de formes, comme une instruction case. Nous verrons comment ces extensions sont
définies.
statement : := try inStatement
[ catch pattern then inStatement
{ ´[]´ pattern then inStatement } ]
[ finally inStatement ] end
| raise inExpression end
| . . .
inStatement : := [ { declPart }+ in ] statement
inExpression : := [ { declPart }+ in ] [ statement ] expression
Tableau 2.10 La syntaxe des exceptions.
La clause finally
Une instruction try peut contenir une clause finally qui est toujours exécutée,
que l’instruction lève une exception ou pas. La nouvelle syntaxe :
try s 1 finally s 2 end
est traduite en langage noyau comme :
try s 1 catch X then s 2 raise X end end s 2
(avec un nouvel identificateur X qui n’est pas libre dans s 2 ). Il est possible de définir
une traduction où s 2 n’apparaisse qu’une fois ; nous laissons cette possibilité aux
exercices.
La clause finally est utile pour gérer des entités qui sont à l’extérieur du modèle
de calcul. Avec finally, nous pouvons garantir qu’une action de « nettoyage » sera
toujours effectuée sur l’entité qu’une exception ait lieu ou pas. Un exemple typique est
la lecture d’un fichier. Supposons que F soit un fichier ouvert.
16 La procédure ProcessFile traite le fichier et la procédure CloseFile le ferme. Le programme suivant garantit que F sera toujours fermé après l’exécution de ProcessFile, qu’une
exception soit levée ou pas :
try {ProcessFile F} finally {CloseFile F} end
16. Nous verrons plus tard comment traiter l’entrée/sortie des fichiers (voir section 3.7).
Précédent

- 113/370

Suivant