UFR d’Informatique
Master premi´ere Ann´ee - M1
Parcours Sciences et Technologies du Logiciel - STL
Unit´e d’enseignement ILP
TD6: G´en´eration de code C pour les bool´eens
Dans cette s´eance nous implanterons les op´eration bool´eennes usuelles en ILP. Nous travaillerons en TD sur
les listings d’ILP1 mais nous les impl´ementerons en TME en ILP2.
La syntaxe concr`ete pour les op´erations bool´eennes existe d´ej`a en ILP1 mais toutes ne sont pas impl´ement´ees.
Nous allons voir diff´erents choix d’impl´ementation pour ces op´erations.
Exercice 1
En consultant les fichiers Cgenerator.java et CgenEnvironment.java qui se trouvent `a partir de la page
40/60 des listings, compiler le programme ILP
<programme1>
<blocUnaire>
<variable nom=’x’/>
<valeur>
<booleen valeur=’true’/>
</valeur>
<corps>
<operationUnaire operateur=’!’>
<operande>
<variable nom=’x’/>
</operande>
</operationUnaire>
</corps>
</blocUnaire>
</programme1>
On tracera les diff´erents appels de m´ethodes generate et compileOperator1 et on pourra d´etailler les
environnements qui interviennent. On pourra remarquer que la compilation introduit une variable temporaire,
pourquoi est-ce n´ecessaire ?
Exercice 2
En examinant les fichiers ilp.h et ilp.h qui se trouvent `a partir de la page 48/60, donner les valeurs qui
sont cr´ees `a l’ex´ecution des ce programme.
Exercice 3
Nous souhaitons maintenant impl´ementer rapidement les op´erations bool´eennes usuelles dans l’interpr`ete
ILP1. En examinant les fichiers EASToperationBinaire.java et CommonPlus.java Expliquez pourquoi
l’´evaluation du programme
<programme1>
<operationBinaire operateur=’&amp;’>
<operandeGauche>
<booleen valeur=’true’/>
</operandeGauche>
<operandeDroit>
<booleen valeur=’false’/>
</operandeDroit>
</operationBinaire>
</programme1>
1
´echoue.
Exercice 4
Nous souhaitons maintenant faire la g´en´eration de code C pour les op´erations bool´eennes binaires. En
reprenant les fichiers Cgenerator.java et CgenEnvironment.java expliquez pourquoi le programme de
l’exercice 3 ne se compile pas. Faites en sorte de pouvoir produire un programme C.
Exercice 5
Nous devons maintenant ajouter dans le runtime C d’ILP les implantations n´ecessaires pour pouvoir ex´ecuter
l’appel que nous venons de g´en´erer. Modifier les fihciers ilp.h et ilp.c de fa¸con `a ajouter les op´erations
manquantes.
Exercice 6
Nous pouvons maintenant interpr´eter et compiler des programmes contenant des «et »logiques. Pour
implanter le «ou »nous pouvons nous aider des lois Morgan et implanter a«ou »b`a l’aide de
«non »(«non »a«et » « non »b)
Exercice 7
il y a 16 op´erations bool´eennnes `a deux arguments, il nous reste deux op´erations usuelles `a implanter qui
sont le «xor »et le «nand ». Le ou exclusif se note souvent +ou != et nous pouvons utiliser la syntaxe ^
pour le «nand ». On rappelle que a«nand »bvaut !(a&b). Comment impl´ementer ces notations ?
Exercice 8
Nous avons jusqu’`a maintenant impl´ement´e une strat´egie d’´evaluation et de compilation pour les op´erations
logiques dans laquelle les arguments sont compl`etements ´evalu´es, elle se nomme la full evaluation. Toutefois
chacun sait que les valeurs «vrai »et «faux »poss`edent des propri´et´es remarquables pour les op´erations
«et »et «ou ». Ainsi dans a«et »b, si aest «faux »il n’est pas ecessaire d’´evaluer bpour retourner
«faux ». De eme dans a«ou »b, si aest «vrai », il n’est pas ecessaire d’´evaluer bpour retourner «vrai ».
La valeur «faux »est dite absorbante pour l’op´eration «et », et la valeur «vrai »est dite absorbante pour
l’op´eration «ou ».
Ainsi certains langages de programmation impl´ementent une strat´egie de lazy evaluation qui consiste `a
ne pas ´evaluer le deuxi`eme argument lorsque le r´esultat de l’´evaluation du premier argument est l’absorbant
de l’op´eration. Ainsi, dans une syntaxe `a la ML, un code
a&b
est ´equivalent `a
if athen belse a
Question 8.1
Voyons d’abord l’´evaluateur. Pourquoi ne pouvons nous pas modifier CommonPlus.java pour impl´ementer
cette strat´egie ? Faire les modifications ecessaires pour l’impl´ementer.
Question 8.2
Voyons maintenant la g´en´eration de code C. Pourquoi ne peut-on pas se contenter de modifier le runtime
d’ILP ? Faire les modifications ecessaires pour implanter la strat´egie d’´evaluation paresseuse.
Question 8.3
Donner des exemples de programmes qui s’´evaluent,se compilent et s’ex´ecutent correctement avec la emantique
d’´evaluation paresseuse du «et »logique alors que ce ne serait pas le cas avec sa s´emantique d’´evaluation
compl`ette.
Question 8.4
Comment se comporte la d´efinition du «ou »logique de l’exercice 6 vis `a vis de l ´evaluation paresseuse ?
Pouvez vous y rem´edier ?
2
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !