Table of Contents
LANGAGES ET TRADUCTEURS – Chapitre 8 Jean-François Monin, 2021
1 Rappels sur la SN (grands pas)
1.1 Conception
- conçue dans le même esprit que la sémantique fonctionnelle mais en utilisant une relation ternaire ;
- chaque instruction est vue comme une transformation entre – un état initial (avant l'exécution de l'instruction) ; – un état final (après l'exécution).
1.2 Limites
1.2.1 Terminaison
- Difficile de conclure quelque chose au sujet des programmes qui "bouclent" (ne terminent pas).
- Pourtant l'état évolue ; il pourrait y avoir d'autres effets de bord observables.
1.2.2 Interruptions
- Difficile de conclure quelque chose au sujet des programmes qui "plantent violemment" (ex. division pr zéro) ;
- gestion des interruptions en général
1.2.3 Composition parallèle (entrelacement)
- On ne peut pas décrire tous les comportements souhaitables.
1.3 Autre nom : sémantique opérationnelle à grand pas
2 Sémantique opérationelle structurelle (ou à petits pas), SOS
2.1 Principe
- Encore une relation inductive pilotée par l'instruction à exécuter.
- Mais ici, on décrit une relation entre l'état courant et l'état suivant après exécution d'une étape élémentaire dite aussi petit pas par ex. une affectation) de l'instruction courante.
- À l'issue d'un petit pas, on aboutit à une nouvelle configuration composée : – du nouvel état – du reste du programme à exécuter ; ce dernier est représenté par un AST, amis on peut le penser comme un compteur ordinal (program counter).
- Autrement dit, une transition (petit pas) transforme une configuration en une nouvelle configuration.
- L'exécution complète d'un programme consiste à répéter des petits pas (fermeture transitive de SOS1)
- On a ainsi accès à l'état mémoire obtenu après 1, 2,… n petits pas.
2.2 Configurations
Deux possibilités en fait :
- configuration intermédiaire Inter = "en cours de calcul"
- configuration Final "calcul terminé"
Pas de calcul partant de Final, pas même de petit pas. Petit pas : état -> AST -> configuration
2.3 Fichiers
3 Arbres de SOS
3.1 Exemple
P1 = "while not (i=0) do {i := i-1; x := 1+x}".