1 CSI3525: Concepts des Languages de Programmation Notes # 4: Description Semantique des Languages
2 Rappel: Semantique Statique vs Semantique Dynamique n La semantique statique represente les formes legales des programmes qui ne peuvent pas etre facilemet decritesen grammaire BNF. On appelle cette semantique, statique, car elle est verifiee pendant la compilation. n La semantique dynamique decrit la signification des programmes ou les effets encourus par lexecution dun programme.
3 Pourquoi Decrire la Semantique Dynamique? n Les programmeurs doivent savoir exactement ce que fait chaque portion de leur programme n Les personnes qui ecrivent les compilateurs doivent aussi savoir ce que doivent faire chaque instruction. n Bien quelles soient imprecises, les programmeurs et ecrivains de compilateurs doivent se servir de descriptions en Anglais car les descriptions de semantique formelle sont tres complexes. n Neanmoins, la definition dune notation formelle et adequate serait importante car elle pourrait aider les ecrivains de compilateurs avec des descriptions plus precises, et peut-etre, meme permettre la generation de compilateur automatique.
4 Specification de la Semantique Dynamique (ou, simplement, Semantique) Il y a trois methodes de specification semantique: Description Operationnelle: la signification dun programme est determinee par lexecution de ses enonces sur une machine virtuelle. Description Denotationelle: la signification dun programme est decrite a laide de fonctions montrant leffet de lapplication dun enonce sur letat de la machine. Description Axiomatique: la signification dun programme est decrite a laide dassertions specifiant les contraintes et relations quimposent un enonce.
5 Semantique Operationnelle n Lidee de la semantique operationnelle est de decrire la signification dun programme en executant ses instructions sur une machine reelle ou simulee. Les changements qui prennent place dans le statut de la machine lorsquelle execute ces instructions represente la signification de cette instruction. n Pour construire une machine simulee idealisee, il faut deux composantes: un traducteur qui traduit le language L en language de bas-niveau et une machine virtuelle dont le statut change lorsque le code de bas- niveau est execute. n La semantique operationelle est effective. Neanmoins, elle nest pas formelle et peut creer des circularites.
6 Semantique Denotationnelle n La semantique denotationnelle est la methode la plus rigoureuse de description semantique des programmes. n Lidee consiste a definir, pour chaque entite du language, un objet mathematique et une fonction qui attache les instances de cette entite aux instances de lobjet mathematique corrspondant. n Comme pour la semantique operationelle, le statut dune machine idealisee (en fait la valeur des variables) represente la signification dune instruction n La difficulte de cette methode est dans la creation dobjets et de fonctions pour ces objets. La notation est aussi difficile a lire quoi que tres concise.
7 Semantique Axiomatique I n La semantique axiomatique est definie en conjonction avec une methode de preuve de validite de programmes. n Lorsque le programme est correct, il existe une preuve de validite et dans cette preuve, chaque proposition est precedee et suivie dune expression logique (pre-condition et post-condition) qui specifie des contraintes sur les variables du programme. Ce sont ces contraintes qui definissent la signification du programme.
8 Semantique Axiomatique II n La pre-condition la plus faible represente la pre- condition la moins restrictive qui garantie la validite de la post-condition associee a linstruction du programme. n Si la pre-condition la plus faible peut etre calculee a partir de la post-condition definie pour chaque instruction du language, preuves de validite peuvent etre construites pour les programmes de ce language. n Les preuves sont construites en partant de la fin dun programme et en remontant vers son debut. n La semantique axiomatique nest pas tres utile pour decrire la signification des languages de programmation a cause de sa comlexite. Neanmoins, elle est utile pour la recherche et pour le raisonnement sur les programmes.
9 Semantique Axiomatique III n Plus precisement, la verification de programmes se fait en deux etapes: – lassociation dune formule avec chaque etape du calcul significatif. – La demonstration que la formule finale sensuit logiquement de la formule initiale grace aux etapes et formules intermediaires. n Les formules pour laffectement et les conditions sont les formules de base. Leffet de toutes les autres instructions en decoulent logiquement.
10 Semantique Axiomatique IV: lAffectement n Supposons que x = E soit une instruction daffectement et que Q soit sa postcondition. Alors, sa precondition est definie par laxiome P = Q x --> E qui signifie que P est calcule comme Q avec toutes les instances de x remplacees par E. n Comment peut-on prouver lexactitude de programmes (et en particulier dune instruction daffectement) avec de tels outils? n
11 Semantique Axiomatique V: Justification de la procedure n Une instruction daffectement avec sa precondition et sa postcondition peuvent etre consideres comme des theoremes. n Si laxiome daffectement, lorsquapplique a la postcondition et a linstruction daffectement, produit la precondition donnee, alors on peut dire que le theoreme est prouve, et donc, le programme est exact ou correcte.
12 Semantique Axiomatique VI: la Regle de Consequence (retrecissement ou elargissement) n Parfois, la pre-condition obtenue par la procedure ne correspond pas a la pre- condition attendue. n Dans ce cas, on peut se servir de la regle de consequence qui est la regle dinference suivante: {P} S {Q}, P => P, Q => Q {P} S {Q}
13 Semantique Axiomatique VII: Sequences dinstructions Etant donne deux instructions adjacentes avec les pre- et post- conditions suivantes: {P1} S1 {P2} {P2} S2 {P3} La regle dinference pour une telle sequence est: {P1} S1 {P2}, {P2} S2 {P3} {P1} S1 ; S2 {P3}
14 Semantique Axiomatique VIII: les Instructions de Selection n If-then-else: {B and P} S1 {Q}, {(not B) and P} S2 {Q} {P} if B then S1 else S2 {Q} n If-then: {B and P} S1 {Q}, {(not B) and P} => Q {P} if B then S1 {Q}
15 Semantique Axiomatique IX: Les Boucles a Test Initial n Dans une boucle a test initial (ou une boucle while), on a une repetition dinstruction. Le probleme avec ces boucles, cependant, est quon ne sait pas combien de repetitions il y a => il est assez difficile de determiner lexactitude de ces boucles. n La methode utilisee est similaire a la methode mathematique dinduction. n Lhypothese inductive sappelle linvariant de la boucle (loop invariant)
16 Semantique Axiomatique X: Les Boucles a Test Initial n La regle dinference qui permet de trouver la pre- condition dune boucle while est la suivante: {I and B} S {I} {I} while B do S end {I and (not B)} I represente linvariant de la boucle mais il nest. pas fourni. Cest a nous de le trouver! n Comment? En calculant la pre-condition pour un certain nombre de repetitions et en essayant de deviner un motif.
17 Semantique Axiomatique XI: Les Boucles a Test Initial n Mais trouver linvariant de boucle nest pas tout!!! n Etant donne linstruction {P} while B do S end {Q}, et linvariant de boucle, I, voici un resume de toutes les choses qui doivent etre demontrees afin de prouver lexactitude dune boucle while: P => I {I} B {I} {I and B} S {I} (I and (not B)) => Q La boucle se termine.